[Bf-blender-cvs] [394a2877142] blender-v2.83-release: Fix T80520: Tris to Quads ignores UV delimit option

2020-10-07 Thread mano-wii
Commit: 394a28771429442ae2946b2b68db726522f7e59f
Author: mano-wii
Date:   Mon Sep 21 15:01:46 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rB394a28771429442ae2946b2b68db726522f7e59f

Fix T80520: Tris to Quads ignores UV delimit option

===

M   source/blender/bmesh/operators/bmo_join_triangles.c

===

diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c 
b/source/blender/bmesh/operators/bmo_join_triangles.c
index efb8b810581..1da4be57568 100644
--- a/source/blender/bmesh/operators/bmo_join_triangles.c
+++ b/source/blender/bmesh/operators/bmo_join_triangles.c
@@ -166,7 +166,7 @@ static bool bm_edge_delimit_cdata(CustomData *ldata,
   r_delim_cd->cd_type = type;
   r_delim_cd->cd_size = CustomData_sizeof(r_delim_cd->cd_type);
   r_delim_cd->cd_offset = CustomData_get_n_offset(ldata, type, 0);
-  r_delim_cd->cd_offset_end = r_delim_cd->cd_size * layer_len;
+  r_delim_cd->cd_offset_end = r_delim_cd->cd_offset + (r_delim_cd->cd_size * 
layer_len);
   return (r_delim_cd->cd_offset != -1);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [60fbed3dba9] blender-v2.90-release: Fix T80520: Tris to Quads ignores UV delimit option

2020-09-21 Thread mano-wii
Commit: 60fbed3dba9f7cafd134f7a6dfe2892252a2d54b
Author: mano-wii
Date:   Mon Sep 21 15:01:46 2020 +1000
Branches: blender-v2.90-release
https://developer.blender.org/rB60fbed3dba9f7cafd134f7a6dfe2892252a2d54b

Fix T80520: Tris to Quads ignores UV delimit option

===

M   source/blender/bmesh/operators/bmo_join_triangles.c

===

diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c 
b/source/blender/bmesh/operators/bmo_join_triangles.c
index efb8b810581..1da4be57568 100644
--- a/source/blender/bmesh/operators/bmo_join_triangles.c
+++ b/source/blender/bmesh/operators/bmo_join_triangles.c
@@ -166,7 +166,7 @@ static bool bm_edge_delimit_cdata(CustomData *ldata,
   r_delim_cd->cd_type = type;
   r_delim_cd->cd_size = CustomData_sizeof(r_delim_cd->cd_type);
   r_delim_cd->cd_offset = CustomData_get_n_offset(ldata, type, 0);
-  r_delim_cd->cd_offset_end = r_delim_cd->cd_size * layer_len;
+  r_delim_cd->cd_offset_end = r_delim_cd->cd_offset + (r_delim_cd->cd_size * 
layer_len);
   return (r_delim_cd->cd_offset != -1);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f5b6b825980] master: Fix T80520: Tris to Quads ignores UV delimit option

2020-09-20 Thread mano-wii
Commit: f5b6b825980fc59cc54e69fbc1e967eebee1ad43
Author: mano-wii
Date:   Mon Sep 21 15:01:46 2020 +1000
Branches: master
https://developer.blender.org/rBf5b6b825980fc59cc54e69fbc1e967eebee1ad43

Fix T80520: Tris to Quads ignores UV delimit option

===

M   source/blender/bmesh/operators/bmo_join_triangles.c

===

diff --git a/source/blender/bmesh/operators/bmo_join_triangles.c 
b/source/blender/bmesh/operators/bmo_join_triangles.c
index efb8b810581..1da4be57568 100644
--- a/source/blender/bmesh/operators/bmo_join_triangles.c
+++ b/source/blender/bmesh/operators/bmo_join_triangles.c
@@ -166,7 +166,7 @@ static bool bm_edge_delimit_cdata(CustomData *ldata,
   r_delim_cd->cd_type = type;
   r_delim_cd->cd_size = CustomData_sizeof(r_delim_cd->cd_type);
   r_delim_cd->cd_offset = CustomData_get_n_offset(ldata, type, 0);
-  r_delim_cd->cd_offset_end = r_delim_cd->cd_size * layer_len;
+  r_delim_cd->cd_offset_end = r_delim_cd->cd_offset + (r_delim_cd->cd_size * 
layer_len);
   return (r_delim_cd->cd_offset != -1);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d1226a6d9d2] master: Revert "Possible fix for T76113: Use GL_STATIC_DRAW in immBegin"

2020-05-04 Thread mano-wii
Commit: d1226a6d9d2714443cbc6e911ddd26904edcde44
Author: mano-wii
Date:   Mon May 4 08:40:45 2020 -0300
Branches: master
https://developer.blender.org/rBd1226a6d9d2714443cbc6e911ddd26904edcde44

Revert "Possible fix for T76113: Use GL_STATIC_DRAW in immBegin"

This reverts commit 7df51ca11a227b5e51290f8dc976972a01db5d81.
Did not solve the main problem.

===

M   source/blender/gpu/intern/gpu_immediate.c

===

diff --git a/source/blender/gpu/intern/gpu_immediate.c 
b/source/blender/gpu/intern/gpu_immediate.c
index f91a13a3b62..5a5dfb3e1e8 100644
--- a/source/blender/gpu/intern/gpu_immediate.c
+++ b/source/blender/gpu/intern/gpu_immediate.c
@@ -268,8 +268,7 @@ void immBegin(GPUPrimType prim_type, uint vertex_len)
   else {
 /* orphan this buffer & start with a fresh one */
 /* this method works on all platforms, old & new */
-/* `GL_DYNAMIC_DRAW` was causing problems when closing temporary windows 
on old AMD GPUs. */
-glBufferData(GL_ARRAY_BUFFER, active_buffer->buffer_size, NULL, 
GL_STATIC_DRAW);
+glBufferData(GL_ARRAY_BUFFER, active_buffer->buffer_size, NULL, 
GL_DYNAMIC_DRAW);
 
 active_buffer->buffer_offset = 0;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7df51ca11a2] master: Possible fix for T76113: Use GL_STATIC_DRAW in immBegin

2020-05-02 Thread mano-wii
Commit: 7df51ca11a227b5e51290f8dc976972a01db5d81
Author: mano-wii
Date:   Sat May 2 10:21:17 2020 -0300
Branches: master
https://developer.blender.org/rB7df51ca11a227b5e51290f8dc976972a01db5d81

Possible fix for T76113: Use GL_STATIC_DRAW in immBegin

This fixes a freeze when closing temporary windows with `AMD Radeon HD 7570M`
The performance is practically the same between calls (with a micro advantage 
for `GL_STATIC_DRAW`)
I couldn't check the difference in memory usage.
The ideal would be profile in different setups.
But due to the seriousness of the bug, these tests were postponed.

===

M   source/blender/gpu/intern/gpu_immediate.c

===

diff --git a/source/blender/gpu/intern/gpu_immediate.c 
b/source/blender/gpu/intern/gpu_immediate.c
index 5a5dfb3e1e8..f91a13a3b62 100644
--- a/source/blender/gpu/intern/gpu_immediate.c
+++ b/source/blender/gpu/intern/gpu_immediate.c
@@ -268,7 +268,8 @@ void immBegin(GPUPrimType prim_type, uint vertex_len)
   else {
 /* orphan this buffer & start with a fresh one */
 /* this method works on all platforms, old & new */
-glBufferData(GL_ARRAY_BUFFER, active_buffer->buffer_size, NULL, 
GL_DYNAMIC_DRAW);
+/* `GL_DYNAMIC_DRAW` was causing problems when closing temporary windows 
on old AMD GPUs. */
+glBufferData(GL_ARRAY_BUFFER, active_buffer->buffer_size, NULL, 
GL_STATIC_DRAW);
 
 active_buffer->buffer_offset = 0;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3a5c16f1c98] master: Fix T74720: bmesh.ops.delete default context argument does nothing

2020-04-07 Thread mano-wii
Commit: 3a5c16f1c981567a800c1094898e892f84d855a0
Author: mano-wii
Date:   Tue Apr 7 23:22:28 2020 +1000
Branches: master
https://developer.blender.org/rB3a5c16f1c981567a800c1094898e892f84d855a0

Fix T74720: bmesh.ops.delete default context argument does nothing

===

M   source/blender/bmesh/intern/bmesh_operators.c

===

diff --git a/source/blender/bmesh/intern/bmesh_operators.c 
b/source/blender/bmesh/intern/bmesh_operators.c
index d3c8499477b..6454079a5dc 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -138,6 +138,8 @@ static void bmo_op_slots_init(const BMOSlotType 
*slot_types, BMOpSlot *slot_args
  BMO_OP_SLOT_SUBTYPE_INT_ENUM,
  BMO_OP_SLOT_SUBTYPE_INT_FLAG)) {
   slot->data.enum_data.flags = slot_types[i].enum_flags;
+  /* Set the first value of the enum as the default value. */
+  slot->data.i = slot->data.enum_data.flags[0].value;
 }
   default:
 break;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7c4391e6aa8] master: Fix T60069: repeated extrusion uses wrong axis

2020-04-06 Thread mano-wii
Commit: 7c4391e6aa88e18231302e733481b26afa0072bd
Author: mano-wii
Date:   Tue Apr 7 13:42:50 2020 +1000
Branches: master
https://developer.blender.org/rB7c4391e6aa88e18231302e733481b26afa0072bd

Fix T60069: repeated extrusion uses wrong axis

===

M   source/blender/editors/transform/transform.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index c48c86bd423..c1e890ed5f1 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1767,6 +1767,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator 
*op)
   }
   else {
 orientation = V3D_ORIENT_GLOBAL;
+unit_m3(t->spacemtx);
   }
 
   if ((prop = RNA_struct_find_property(op->ptr, "orient_axis"))) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [1f949121cd3] master: Fix T74969: Crash in gpencil edit mode

2020-03-27 Thread mano-wii
Commit: 1f949121cd3f58ecd2d8a29caad68a618ba4efd3
Author: mano-wii
Date:   Fri Mar 27 20:11:23 2020 -0300
Branches: master
https://developer.blender.org/rB1f949121cd3f58ecd2d8a29caad68a618ba4efd3

Fix T74969: Crash in gpencil edit mode

Result of poor shader pre-processing on Intel HD 4000 drivers

===

M   source/blender/draw/engines/overlay/shaders/edit_gpencil_vert.glsl

===

diff --git a/source/blender/draw/engines/overlay/shaders/edit_gpencil_vert.glsl 
b/source/blender/draw/engines/overlay/shaders/edit_gpencil_vert.glsl
index 3a52e0c73b7..732e392ffe0 100644
--- a/source/blender/draw/engines/overlay/shaders/edit_gpencil_vert.glsl
+++ b/source/blender/draw/engines/overlay/shaders/edit_gpencil_vert.glsl
@@ -21,11 +21,11 @@ void discard_vert()
   gl_Position = vec4(0.0, 0.0, -3e36, 0.0);
 }
 
-#define GP_EDIT_POINT_SELECTED (1u << 0u)
-#define GP_EDIT_STROKE_SELECTED (1u << 1u)
-#define GP_EDIT_MULTIFRAME (1u << 2u)
-#define GP_EDIT_STROKE_START (1u << 3u)
-#define GP_EDIT_STROKE_END (1u << 4u)
+#define GP_EDIT_POINT_SELECTED 1u  /* 1 << 0 */
+#define GP_EDIT_STROKE_SELECTED 2u /* 1 << 1 */
+#define GP_EDIT_MULTIFRAME 4u  /* 1 << 2 */
+#define GP_EDIT_STROKE_START 8u/* 1 << 3 */
+#define GP_EDIT_STROKE_END 16u /* 1 << 4 */
 
 #ifdef USE_POINTS
 #  define colorUnselect colorGpencilVertex

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [07163944234] master: Cleanup: Transform: Rearrange definitions and declarations

2020-02-15 Thread mano-wii
Commit: 071639442344bc8fd689456108bbea0bfd527037
Author: mano-wii
Date:   Sat Feb 15 18:43:58 2020 -0300
Branches: master
https://developer.blender.org/rB071639442344bc8fd689456108bbea0bfd527037

Cleanup: Transform: Rearrange definitions and declarations

===

M   source/blender/editors/transform/transform.h
M   source/blender/editors/transform/transform_convert.c
M   source/blender/editors/transform/transform_convert.h
M   source/blender/editors/transform/transform_convert_armature.c
M   source/blender/editors/transform/transform_generics.c
M   source/blender/editors/transform/transform_mode.h
M   source/blender/editors/transform/transform_mode_edge_slide.c
M   source/blender/editors/transform/transform_mode_vert_slide.c

===

diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index 34b6d5d3d19..5efa562a4e4 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -270,114 +270,6 @@ typedef struct TransDataNla {
   int handle;
 } TransDataNla;
 
-struct LinkNode;
-
-/* header of TransDataEdgeSlideVert, TransDataEdgeSlideEdge */
-typedef struct TransDataGenericSlideVert {
-  struct BMVert *v;
-  struct LinkNode **cd_loop_groups;
-  float co_orig_3d[3];
-} TransDataGenericSlideVert;
-
-typedef struct TransDataEdgeSlideVert {
-  /** #TransDataGenericSlideVert (header) */
-  struct BMVert *v;
-  struct LinkNode **cd_loop_groups;
-  float v_co_orig[3];
-  /* end generic */
-
-  float edge_len;
-
-  struct BMVert *v_side[2];
-
-  /* add origvert.co to get the original locations */
-  float dir_side[2][3];
-
-  int loop_nr;
-} TransDataEdgeSlideVert;
-
-typedef struct EdgeSlideData {
-  TransDataEdgeSlideVert *sv;
-  int totsv;
-
-  int mval_start[2], mval_end[2];
-  int curr_sv_index;
-
-  /** when un-clamped - use this index: #TransDataEdgeSlideVert.dir_side */
-  int curr_side_unclamp;
-} EdgeSlideData;
-
-typedef struct EdgeSlideParams {
-  float perc;
-
-  bool use_even;
-  bool flipped;
-} EdgeSlideParams;
-
-typedef struct TransDataVertSlideVert {
-  /** #TransDataGenericSlideVert (header) */
-  struct BMVert *v;
-  struct LinkNode **cd_loop_groups;
-  float co_orig_3d[3];
-  /* end generic */
-
-  float (*co_link_orig_3d)[3];
-  int co_link_tot;
-  int co_link_curr;
-} TransDataVertSlideVert;
-
-typedef struct VertSlideData {
-  TransDataVertSlideVert *sv;
-  int totsv;
-  int curr_sv_index;
-
-  /* result of ED_view3d_ob_project_mat_get */
-  float proj_mat[4][4];
-} VertSlideData;
-
-typedef struct VertSlideParams {
-  float perc;
-
-  bool use_even;
-  bool flipped;
-} VertSlideParams;
-
-typedef struct BoneInitData {
-  struct EditBone *bone;
-  float tail[3];
-  float rad_head;
-  float rad_tail;
-  float roll;
-  float head[3];
-  float dist;
-  float xwidth;
-  float zwidth;
-} BoneInitData;
-
-typedef struct PoseInitData_Mirror {
-  /** Points to the bone which this info is initialized & restored to.
-   * A NULL value is used to terminate the array. */
-  struct bPoseChannel *pchan;
-  struct {
-float loc[3];
-float size[3];
-union {
-  float eul[3];
-  float quat[4];
-  float axis_angle[4];
-};
-float curve_in_x;
-float curve_out_x;
-float roll1;
-float roll2;
-  } orig;
-  /**
-   * An extra offset to apply after mirroring.
-   * Use with #POSE_MIRROR_RELATIVE.
-   */
-  float offset_mtx[4][4];
-} PoseInitData_Mirror;
-
 typedef struct TransData {
   /** Distance needed to affect element (for Proportionnal Editing). */
   float dist;
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index 7fde1a4f6b6..027ae04795a 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -1870,13 +1870,9 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
   }
   else {
 if (t->mode == TFM_EDGE_SLIDE) {
-  EdgeSlideParams *slp = t->custom.mode.data;
-  slp->perc = 0.0;
   projectEdgeSlideData(t, false);
 }
 else if (t->mode == TFM_VERT_SLIDE) {
-  EdgeSlideParams *slp = t->custom.mode.data;
-  slp->perc = 0.0;
   projectVertSlideData(t, false);
 }
   }
diff --git a/source/blender/editors/transform/transform_convert.h 
b/source/blender/editors/transform/transform_convert.h
index e81a896e062..075bf0a5a4b 100644
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@ -63,6 +63,7 @@ void clipUVData(TransInfo *t);
 void flushTransIntFrameActionData(TransInfo *t);
 
 /* transform_convert_armature.c */
+void pose_transform_mirror_update(TransInfo *t, TransDataContainer *t

[Bf-blender-cvs] [b5f17f6b8a0] master: Cleanup: Silence warnings

2020-02-15 Thread mano-wii
Commit: b5f17f6b8a058185cf1c85b308557e5cf9d7a573
Author: mano-wii
Date:   Sat Feb 15 16:22:04 2020 -0300
Branches: master
https://developer.blender.org/rBb5f17f6b8a058185cf1c85b308557e5cf9d7a573

Cleanup: Silence warnings

===

M   source/blender/editors/transform/transform_mode_timescale.c
M   source/blender/editors/transform/transform_mode_timetranslate.c

===

diff --git a/source/blender/editors/transform/transform_mode_timescale.c 
b/source/blender/editors/transform/transform_mode_timescale.c
index 6af5dc3033c..b75ef4da0f2 100644
--- a/source/blender/editors/transform/transform_mode_timescale.c
+++ b/source/blender/editors/transform/transform_mode_timescale.c
@@ -64,15 +64,12 @@ static void headerTimeScale(TransInfo *t, char 
str[UI_MAX_DRAW_STR])
 static void applyTimeScaleValue(TransInfo *t, float value)
 {
   Scene *scene = t->scene;
-  int i;
-
   const short autosnap = getAnimEdit_SnapMode(t);
-  const double secf = FPS;
 
   FOREACH_TRANS_DATA_CONTAINER (t, tc) {
 TransData *td = tc->data;
 TransData2D *td2d = tc->data_2d;
-for (i = 0; i < tc->data_len; i++, td++, td2d++) {
+for (int i = 0; i < tc->data_len; i++, td++, td2d++) {
   /* it is assumed that td->extra is a pointer to the AnimData,
* whose active action is where this keyframe comes from
* (this is only valid when not in NLA)
diff --git a/source/blender/editors/transform/transform_mode_timetranslate.c 
b/source/blender/editors/transform/transform_mode_timetranslate.c
index 7887c17f537..e08aa33b320 100644
--- a/source/blender/editors/transform/transform_mode_timetranslate.c
+++ b/source/blender/editors/transform/transform_mode_timetranslate.c
@@ -89,18 +89,14 @@ static void headerTimeTranslate(TransInfo *t, char 
str[UI_MAX_DRAW_STR])
 
 static void applyTimeTranslateValue(TransInfo *t, const float deltax)
 {
-  Scene *scene = t->scene;
-  int i;
-
   const short autosnap = getAnimEdit_SnapMode(t);
-  const double secf = FPS;
 
   FOREACH_TRANS_DATA_CONTAINER (t, tc) {
 TransData *td = tc->data;
 TransData2D *td2d = tc->data_2d;
 /* It doesn't matter whether we apply to t->data or
  * t->data2d, but t->data2d is more convenient. */
-for (i = 0; i < tc->data_len; i++, td++, td2d++) {
+for (int i = 0; i < tc->data_len; i++, td++, td2d++) {
   /* It is assumed that td->extra is a pointer to the AnimData,
* whose active action is where this keyframe comes from.
* (this is only valid when not in NLA)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [738bb309f94] master: GPU: Add GPU support to fill a texture image with a constant value

2020-02-15 Thread mano-wii
Commit: 738bb309f9490c4d6e056e7df8ff9a6e60ad45df
Author: mano-wii
Date:   Sat Feb 15 12:17:39 2020 -0300
Branches: master
https://developer.blender.org/rB738bb309f9490c4d6e056e7df8ff9a6e60ad45df

GPU: Add GPU support to fill a texture image with a constant value

This solution is optimized for GL version 4.4 or greater.

===

M   source/blender/gpu/GPU_texture.h
M   source/blender/gpu/intern/gpu_texture.c

===

diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index 4e24a3172dc..e8800b75143 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -217,6 +217,7 @@ void GPU_texture_update_sub(GPUTexture *tex,
 int depth);
 
 void *GPU_texture_read(GPUTexture *tex, eGPUDataFormat gpu_data_format, int 
miplvl);
+void GPU_texture_clear(GPUTexture *tex, eGPUDataFormat gpu_data_format, const 
void *color);
 
 void GPU_invalid_tex_init(void);
 void GPU_invalid_tex_bind(int mode);
diff --git a/source/blender/gpu/intern/gpu_texture.c 
b/source/blender/gpu/intern/gpu_texture.c
index ccafc785526..9ef42592b55 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -21,6 +21,8 @@
  * \ingroup gpu
  */
 
+#include 
+
 #include "MEM_guardedalloc.h"
 
 #include "DNA_image_types.h"
@@ -1435,6 +1437,30 @@ void *GPU_texture_read(GPUTexture *tex, eGPUDataFormat 
gpu_data_format, int mipl
   return buf;
 }
 
+void GPU_texture_clear(GPUTexture *tex, eGPUDataFormat gpu_data_format, const 
void *color)
+{
+  if (GLEW_ARB_clear_texture) {
+GLenum data_format = gpu_get_gl_dataformat(tex->format, >format_flag);
+GLenum data_type = gpu_get_gl_datatype(gpu_data_format);
+glClearTexImage(tex->bindcode, 0, data_format, data_type, color);
+  }
+  else {
+size_t buffer_len = gpu_texture_memory_footprint_compute(tex);
+unsigned char *pixels = MEM_mallocN(buffer_len, __func__);
+if (color) {
+  size_t bytesize = tex->bytesize;
+  for (size_t byte = 0; byte < buffer_len; byte += bytesize) {
+memcpy([byte], color, bytesize);
+  }
+}
+else {
+  memset(pixels, 0, buffer_len);
+}
+GPU_texture_update(tex, gpu_data_format, pixels);
+MEM_freeN(pixels);
+  }
+}
+
 void GPU_texture_update(GPUTexture *tex, eGPUDataFormat data_format, const 
void *pixels)
 {
   GPU_texture_update_sub(tex, data_format, pixels, 0, 0, 0, tex->w, tex->h, 
tex->d);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0feb03e680d] master: Fix T73763: Laggy when zooming a node editor with International Fonts

2020-02-15 Thread mano-wii
Commit: 0feb03e680d680c3b8eba0327f74c4fa1f49c6fa
Author: mano-wii
Date:   Sat Feb 15 12:18:43 2020 -0300
Branches: master
https://developer.blender.org/rB0feb03e680d680c3b8eba0327f74c4fa1f49c6fa

Fix T73763: Laggy when zooming a node editor with International Fonts

Two main reasons for the lag:
- Allocation of memory with transfer to GPU.
- BLF_cache_clear();

The (partial) solution is to avoid memory allocating in some setups
through the `GPU_texture_clear`.

Differential Revision: https://developer.blender.org/D6837

===

M   source/blender/blenfont/intern/blf_glyph.c

===

diff --git a/source/blender/blenfont/intern/blf_glyph.c 
b/source/blender/blenfont/intern/blf_glyph.c
index 535366b78fa..80d43a49e77 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -265,16 +265,16 @@ static void blf_glyph_cache_texture(FontBLF *font, 
GlyphCacheBLF *gc)
 gc->p2_height = font->tex_size_max;
   }
 
-  unsigned char *pixels = MEM_callocN((size_t)gc->p2_width * 
(size_t)gc->p2_height,
-  "BLF texture init");
   GPUTexture *tex = GPU_texture_create_nD(
-  gc->p2_width, gc->p2_height, 0, 2, pixels, GPU_R8, 
GPU_DATA_UNSIGNED_BYTE, 0, false, error);
-  MEM_freeN(pixels);
-  gc->textures[gc->texture_current] = tex;
+  gc->p2_width, gc->p2_height, 0, 2, NULL, GPU_R8, GPU_DATA_UNSIGNED_BYTE, 
0, false, error);
+
   GPU_texture_bind(tex, 0);
   GPU_texture_wrap_mode(tex, false);
   GPU_texture_filters(tex, GPU_NEAREST, GPU_LINEAR);
+  GPU_texture_clear(tex, GPU_DATA_UNSIGNED_BYTE, NULL);
   GPU_texture_unbind(tex);
+
+  gc->textures[gc->texture_current] = tex;
 }
 
 GlyphBLF *blf_glyph_search(GlyphCacheBLF *gc, unsigned int c)

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [de9ea94fc6f] master: Transform: Deduplicate time snap code

2020-02-15 Thread mano-wii
Commit: de9ea94fc6f810b101742a4c2b839fb748e95be0
Author: mano-wii
Date:   Sat Feb 15 12:09:23 2020 -0300
Branches: master
https://developer.blender.org/rBde9ea94fc6f810b101742a4c2b839fb748e95be0

Transform: Deduplicate time snap code

===

M   source/blender/editors/transform/transform_mode.c
M   source/blender/editors/transform/transform_mode_timescale.c
M   source/blender/editors/transform/transform_mode_timetranslate.c

===

diff --git a/source/blender/editors/transform/transform_mode.c 
b/source/blender/editors/transform/transform_mode.c
index 2368e0f0dc4..e681b649451 100644
--- a/source/blender/editors/transform/transform_mode.c
+++ b/source/blender/editors/transform/transform_mode.c
@@ -1063,11 +1063,11 @@ short getAnimEdit_SnapMode(TransInfo *t)
 void doAnimEdit_SnapFrame(
 TransInfo *t, TransData *td, TransData2D *td2d, AnimData *adt, short 
autosnap)
 {
-  if (ELEM(autosnap, SACTSNAP_FRAME, SACTSNAP_SECOND, SACTSNAP_MARKER)) {
+  if (autosnap != SACTSNAP_OFF) {
 float val;
 
 /* convert frame to nla-action time (if needed) */
-if (adt) {
+if (adt && (t->spacetype != SPACE_SEQ)) {
   val = BKE_nla_tweakedit_remap(adt, *(td->val), NLATIME_CONVERT_MAP);
 }
 else {
@@ -1077,7 +1077,7 @@ void doAnimEdit_SnapFrame(
 snapFrameTransform(t, autosnap, true, val, );
 
 /* convert frame out of nla-action time */
-if (adt) {
+if (adt && (t->spacetype != SPACE_SEQ)) {
   *(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP);
 }
 else {
diff --git a/source/blender/editors/transform/transform_mode_timescale.c 
b/source/blender/editors/transform/transform_mode_timescale.c
index 2e6d0a59a05..6af5dc3033c 100644
--- a/source/blender/editors/transform/transform_mode_timescale.c
+++ b/source/blender/editors/transform/transform_mode_timescale.c
@@ -81,13 +81,6 @@ static void applyTimeScaleValue(TransInfo *t, float value)
   float startx = CFRA;
   float fac = value;
 
-  if (autosnap == SACTSNAP_TSTEP) {
-fac = (float)(floor((double)fac / secf + 0.5) * secf);
-  }
-  else if (autosnap == SACTSNAP_STEP) {
-fac = floorf(fac + 0.5f);
-  }
-
   /* take proportional editing into account */
   fac = ((fac - 1.0f) * td->factor) + 1;
 
diff --git a/source/blender/editors/transform/transform_mode_timetranslate.c 
b/source/blender/editors/transform/transform_mode_timetranslate.c
index 16e2b3c633d..7887c17f537 100644
--- a/source/blender/editors/transform/transform_mode_timetranslate.c
+++ b/source/blender/editors/transform/transform_mode_timetranslate.c
@@ -87,7 +87,7 @@ static void headerTimeTranslate(TransInfo *t, char 
str[UI_MAX_DRAW_STR])
   }
 }
 
-static void applyTimeTranslateValue(TransInfo *t, float value)
+static void applyTimeTranslateValue(TransInfo *t, const float deltax)
 {
   Scene *scene = t->scene;
   int i;
@@ -95,8 +95,6 @@ static void applyTimeTranslateValue(TransInfo *t, float value)
   const short autosnap = getAnimEdit_SnapMode(t);
   const double secf = FPS;
 
-  float deltax, val /* , valprev */;
-
   FOREACH_TRANS_DATA_CONTAINER (t, tc) {
 TransData *td = tc->data;
 TransData2D *td2d = tc->data_2d;
@@ -110,37 +108,8 @@ static void applyTimeTranslateValue(TransInfo *t, float 
value)
*/
   AnimData *adt = (t->spacetype != SPACE_NLA) ? td->extra : NULL;
 
-  /* valprev = *td->val; */ /* UNUSED */
-
-  /* check if any need to apply nla-mapping */
-  if (adt && (t->spacetype != SPACE_SEQ)) {
-deltax = value;
-
-if (autosnap == SACTSNAP_TSTEP) {
-  deltax = (float)(floor(((double)deltax / secf) + 0.5) * secf);
-}
-else if (autosnap == SACTSNAP_STEP) {
-  deltax = floorf(deltax + 0.5f);
-}
-
-val = BKE_nla_tweakedit_remap(adt, td->ival, NLATIME_CONVERT_MAP);
-val += deltax * td->factor;
-*(td->val) = BKE_nla_tweakedit_remap(adt, val, NLATIME_CONVERT_UNMAP);
-  }
-  else {
-deltax = val = t->values_final[0];
-
-if (autosnap == SACTSNAP_TSTEP) {
-  val = (float)(floor(((double)deltax / secf) + 0.5) * secf);
-}
-else if (autosnap == SACTSNAP_STEP) {
-  val = floorf(val + 0.5f);
-}
-
-*(td->val) = td->ival + val * td->factor;
-  }
-
   /* apply nearest snapping */
+  *(td->val) = td->ival + deltax * td->factor;
   doAnimEdit_SnapFrame(t, td, td2d, adt, autosnap);
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [44d7706fe18] master: Fix property warning due to recent commit

2020-02-14 Thread mano-wii
Commit: 44d7706fe1868d66e8e724aebd9c3841cca67794
Author: mano-wii
Date:   Fri Feb 14 15:54:48 2020 -0300
Branches: master
https://developer.blender.org/rB44d7706fe1868d66e8e724aebd9c3841cca67794

Fix property warning due to recent commit

```Warning: property 'mode' not found in keymap item 
'TRANSFORM_OT_bbone_resize'```

===

M   release/scripts/presets/keyconfig/keymap_data/blender_default.py

===

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py 
b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 1560ed8012e..3842fe35f6c 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -3468,8 +3468,7 @@ def km_pose(params):
 ("armature.layers_show_all", {"type": 'ACCENT_GRAVE', "value": 
'PRESS', "ctrl": True}, None),
 ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": 
True}, None),
 ("pose.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
-("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True},
- {"properties": [("mode", 'BONE_SIZE')]}),
+("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True}, None),
 ("anim.keyframe_insert_menu", {"type": 'I', "value": 'PRESS'}, None),
 ("anim.keyframe_delete_v3d", {"type": 'I', "value": 'PRESS', "alt": 
True}, None),
 ("anim.keying_set_active_set", {"type": 'I', "value": 'PRESS', 
"shift": True, "ctrl": True, "alt": True}, None),
@@ -4187,8 +4186,7 @@ def km_armature(params):
 ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": 
True}, None),
 ("armature.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
 # Special transforms.
-("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True},
- {"properties": [("mode", 'BONE_SIZE')]}),
+("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True}, None),
 ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
  {"properties": [("mode", 'BONE_ENVELOPE')]}),
 ("transform.transform", {"type": 'R', "value": 'PRESS', "ctrl": True},
@@ -5405,7 +5403,7 @@ def km_3d_view_tool_edit_armature_bone_size(params):
 {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
 {"items": [
 ("transform.bbone_resize", {"type": params.tool_tweak, "value": 
'ANY'},
- {"properties": [("release_confirm", True), ("mode", 
'BONE_SIZE')]}),
+ {"properties": [("release_confirm", True)]}),
 ]},
 )

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8645b73cd8c] master: Cleanup: Rename bonesize transform file

2020-02-14 Thread mano-wii
Commit: 8645b73cd8c0c9768b1de332bfeeac3a80388e28
Author: mano-wii
Date:   Fri Feb 14 11:57:56 2020 -0300
Branches: master
https://developer.blender.org/rB8645b73cd8c0c9768b1de332bfeeac3a80388e28

Cleanup: Rename bonesize transform file

`transform_mode_bonesize.c` --> `transform_mode_bbone_resize.c`

===

M   source/blender/editors/transform/CMakeLists.txt
M   source/blender/editors/transform/transform_mode.h
R100source/blender/editors/transform/transform_mode_bonesize.c  
source/blender/editors/transform/transform_mode_bbone_resize.c

===

diff --git a/source/blender/editors/transform/CMakeLists.txt 
b/source/blender/editors/transform/CMakeLists.txt
index cd831256d83..e7d5a52bf42 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -70,10 +70,10 @@ set(SRC
   transform_mode.c
   transform_mode_align.c
   transform_mode_baketime.c
+  transform_mode_bbone_resize.c
   transform_mode_bend.c
   transform_mode_boneenvelope.c
   transform_mode_boneroll.c
-  transform_mode_bonesize.c
   transform_mode_curveshrinkfatten.c
   transform_mode_edge_bevelweight.c
   transform_mode_edge_crease.c
diff --git a/source/blender/editors/transform/transform_mode.h 
b/source/blender/editors/transform/transform_mode.h
index c246da62ef6..dee6634c935 100644
--- a/source/blender/editors/transform/transform_mode.h
+++ b/source/blender/editors/transform/transform_mode.h
@@ -55,6 +55,9 @@ void initAlign(TransInfo *t);
 /* transform_mode_baketime.c */
 void initBakeTime(TransInfo *t);
 
+/* transform_mode_bbone_resize.c */
+void initBoneSize(TransInfo *t);
+
 /* transform_mode_bend.c */
 void initBend(TransInfo *t);
 
@@ -64,9 +67,6 @@ void initBoneEnvelope(TransInfo *t);
 /* transform_mode_boneroll.c */
 void initBoneRoll(TransInfo *t);
 
-/* transform_mode_bonesize.c */
-void initBoneSize(TransInfo *t);
-
 /* transform_mode_curveshrinkfatten.c */
 void initCurveShrinkFatten(TransInfo *t);
 
diff --git a/source/blender/editors/transform/transform_mode_bonesize.c 
b/source/blender/editors/transform/transform_mode_bbone_resize.c
similarity index 100%
rename from source/blender/editors/transform/transform_mode_bonesize.c
rename to source/blender/editors/transform/transform_mode_bbone_resize.c

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ef4505a1583] master: Fix T68610: B-Bone display size/scaling op issues

2020-02-14 Thread mano-wii
Commit: ef4505a1583f117414b484c7bd00a942854fb33d
Author: mano-wii
Date:   Fri Feb 14 11:51:29 2020 -0300
Branches: master
https://developer.blender.org/rBef4505a1583f117414b484c7bd00a942854fb33d

Fix T68610: B-Bone display size/scaling op issues

Fix ReDo and create a new operator to display only the required properties.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D6849

===

M   release/scripts/presets/keyconfig/keymap_data/blender_default.py
M   source/blender/editors/transform/transform_mode_bonesize.c
M   source/blender/editors/transform/transform_ops.c

===

diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py 
b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 929a400244b..1560ed8012e 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -3468,7 +3468,7 @@ def km_pose(params):
 ("armature.layers_show_all", {"type": 'ACCENT_GRAVE', "value": 
'PRESS', "ctrl": True}, None),
 ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": 
True}, None),
 ("pose.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
-("transform.transform", {"type": 'S', "value": 'PRESS', "ctrl": True, 
"alt": True},
+("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True},
  {"properties": [("mode", 'BONE_SIZE')]}),
 ("anim.keyframe_insert_menu", {"type": 'I', "value": 'PRESS'}, None),
 ("anim.keyframe_delete_v3d", {"type": 'I', "value": 'PRESS', "alt": 
True}, None),
@@ -4187,7 +4187,7 @@ def km_armature(params):
 ("armature.armature_layers", {"type": 'M', "value": 'PRESS', "shift": 
True}, None),
 ("armature.bone_layers", {"type": 'M', "value": 'PRESS'}, None),
 # Special transforms.
-("transform.transform", {"type": 'S', "value": 'PRESS', "ctrl": True, 
"alt": True},
+("transform.bbone_resize", {"type": 'S', "value": 'PRESS', "ctrl": 
True, "alt": True},
  {"properties": [("mode", 'BONE_SIZE')]}),
 ("transform.transform", {"type": 'S', "value": 'PRESS', "alt": True},
  {"properties": [("mode", 'BONE_ENVELOPE')]}),
@@ -5404,7 +5404,7 @@ def km_3d_view_tool_edit_armature_bone_size(params):
 "3D View Tool: Edit Armature, Bone Size",
 {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
 {"items": [
-("transform.transform", {"type": params.tool_tweak, "value": 
'ANY'},
+("transform.bbone_resize", {"type": params.tool_tweak, "value": 
'ANY'},
  {"properties": [("release_confirm", True), ("mode", 
'BONE_SIZE')]}),
 ]},
 )
diff --git a/source/blender/editors/transform/transform_mode_bonesize.c 
b/source/blender/editors/transform/transform_mode_bonesize.c
index 57c6df95a0f..9ca1857f011 100644
--- a/source/blender/editors/transform/transform_mode_bonesize.c
+++ b/source/blender/editors/transform/transform_mode_bonesize.c
@@ -108,22 +108,26 @@ static void ElementBoneSize(TransInfo *t, 
TransDataContainer *tc, TransData *td,
 
 static void applyBoneSize(TransInfo *t, const int UNUSED(mval[2]))
 {
-  float size[3], mat[3][3];
-  float ratio = t->values[0];
+  float mat[3][3];
   int i;
   char str[UI_MAX_DRAW_STR];
 
-  copy_v3_fl(size, ratio);
+  if (t->flag & T_INPUT_IS_VALUES_FINAL) {
+copy_v3_v3(t->values_final, t->values);
+  }
+  else {
+float ratio = t->values[0];
 
-  snapGridIncrement(t, size);
+copy_v3_fl(t->values_final, ratio);
 
-  if (applyNumInput(>num, size)) {
-constraintNumInput(t, size);
-  }
+snapGridIncrement(t, t->values_final);
 
-  copy_v3_v3(t->values_final, size);
+if (applyNumInput(>num, t->values_final)) {
+  constraintNumInput(t, t->values_final);
+}
+  }
 
-  size_to_mat3(mat, size);
+  size_to_mat3(mat, t->values_final);
 
   if (t->con.applySize) {
 t->con.applySize(t, NULL, NULL, mat);
@@ -131,7 +135,7 @@ static void applyBoneSize(TransInfo *t, const int 
UNUSED(mval[2]))
 
   copy_m3_m3

[Bf-blender-cvs] [38e06b19f6d] master: Fix T59218: Loop Cut from the Context Menu doesn't slide

2020-02-14 Thread mano-wii
Commit: 38e06b19f6d198cc4846a8e5526ba08369c562ff
Author: mano-wii
Date:   Fri Feb 14 11:43:14 2020 -0300
Branches: master
https://developer.blender.org/rB38e06b19f6d198cc4846a8e5526ba08369c562ff

Fix T59218: Loop Cut from the Context Menu doesn't slide

Differential Revision: https://developer.blender.org/D6810

===

M   release/scripts/startup/bl_ui/space_view3d.py

===

diff --git a/release/scripts/startup/bl_ui/space_view3d.py 
b/release/scripts/startup/bl_ui/space_view3d.py
index 7f053101bab..abc6cc63828 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -3583,7 +3583,8 @@ class VIEW3D_MT_edit_mesh_context_menu(Menu):
 
 col.separator()
 
-col.operator("mesh.loopcut_slide")
+props = col.operator("mesh.loopcut_slide")
+props.TRANSFORM_OT_edge_slide.release_confirm = False
 col.operator("mesh.offset_edge_loops_slide")
 
 col.separator()

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a21f5ec5624] master: Fix T73763: Laggy with nodes Editor + International Fonts

2020-02-14 Thread mano-wii
Commit: a21f5ec56245f7f1fbede4aa3c140a582c3a6a1b
Author: mano-wii
Date:   Fri Feb 14 11:25:41 2020 -0300
Branches: master
https://developer.blender.org/rBa21f5ec56245f7f1fbede4aa3c140a582c3a6a1b

Fix T73763: Laggy with nodes Editor + International Fonts

Two main reasons for the lag:
- Allocation of memory with transfer to GPU.
- BLF_cache_clear();

The memory allocation seems to be unnecessary, so I removed it.

Reviewed By: brecht

Differential Revision: https://developer.blender.org/D6837

===

M   source/blender/blenfont/intern/blf_glyph.c
M   source/blender/editors/interface/view2d.c

===

diff --git a/source/blender/blenfont/intern/blf_glyph.c 
b/source/blender/blenfont/intern/blf_glyph.c
index 535366b78fa..ba464c76bd1 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -265,11 +265,9 @@ static void blf_glyph_cache_texture(FontBLF *font, 
GlyphCacheBLF *gc)
 gc->p2_height = font->tex_size_max;
   }
 
-  unsigned char *pixels = MEM_callocN((size_t)gc->p2_width * 
(size_t)gc->p2_height,
-  "BLF texture init");
   GPUTexture *tex = GPU_texture_create_nD(
-  gc->p2_width, gc->p2_height, 0, 2, pixels, GPU_R8, 
GPU_DATA_UNSIGNED_BYTE, 0, false, error);
-  MEM_freeN(pixels);
+  gc->p2_width, gc->p2_height, 0, 2, NULL, GPU_R8, GPU_DATA_UNSIGNED_BYTE, 
0, false, error);
+
   gc->textures[gc->texture_current] = tex;
   GPU_texture_bind(tex, 0);
   GPU_texture_wrap_mode(tex, false);
diff --git a/source/blender/editors/interface/view2d.c 
b/source/blender/editors/interface/view2d.c
index 517d8ca51a3..3ee4d6a085e 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -1123,7 +1123,8 @@ void UI_view2d_zoom_cache_reset(void)
   /* While scaling we can accumulate fonts at many sizes (~20 or so).
* Not an issue with embedded font, but can use over 500Mb with i18n ones! 
See [#38244]. */
 
-  /* note: only some views draw text, we could check for this case to avoid 
clearning cache */
+  /* note: This can be very bad for performance.
+   *   Only some views draw text, we could check for this case to avoid 
clearning cache. */
   BLF_cache_clear();
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e277e8d0850] master: Cleanup: Split transform.c in multiple files

2020-02-14 Thread mano-wii
Commit: e277e8d085037414f34b27f9c1a26cbbf2507c3e
Author: mano-wii
Date:   Fri Feb 14 08:42:17 2020 -0300
Branches: master
https://developer.blender.org/rBe277e8d085037414f34b27f9c1a26cbbf2507c3e

Cleanup: Split transform.c in multiple files

Differential Revision: https://developer.blender.org/D5819

===

M   source/blender/editors/transform/CMakeLists.txt
M   source/blender/editors/transform/transform.c
M   source/blender/editors/transform/transform.h
M   source/blender/editors/transform/transform_convert.c
M   source/blender/editors/transform/transform_generics.c
A   source/blender/editors/transform/transform_mode.c
A   source/blender/editors/transform/transform_mode.h
A   source/blender/editors/transform/transform_mode_align.c
A   source/blender/editors/transform/transform_mode_baketime.c
A   source/blender/editors/transform/transform_mode_bend.c
A   source/blender/editors/transform/transform_mode_boneenvelope.c
A   source/blender/editors/transform/transform_mode_boneroll.c
A   source/blender/editors/transform/transform_mode_bonesize.c
A   source/blender/editors/transform/transform_mode_curveshrinkfatten.c
A   source/blender/editors/transform/transform_mode_edge_bevelweight.c
A   source/blender/editors/transform/transform_mode_edge_crease.c
A   source/blender/editors/transform/transform_mode_edge_rotate_normal.c
A   source/blender/editors/transform/transform_mode_edge_seq_slide.c
A   source/blender/editors/transform/transform_mode_edge_slide.c
A   source/blender/editors/transform/transform_mode_gpopacity.c
A   source/blender/editors/transform/transform_mode_gpshrinkfatten.c
A   source/blender/editors/transform/transform_mode_maskshrinkfatten.c
A   source/blender/editors/transform/transform_mode_mirror.c
A   source/blender/editors/transform/transform_mode_push_pull.c
A   source/blender/editors/transform/transform_mode_resize.c
A   source/blender/editors/transform/transform_mode_rotate.c
A   source/blender/editors/transform/transform_mode_shear.c
A   source/blender/editors/transform/transform_mode_shrink_fatten.c
A   source/blender/editors/transform/transform_mode_skin_resize.c
A   source/blender/editors/transform/transform_mode_tilt.c
A   source/blender/editors/transform/transform_mode_timescale.c
A   source/blender/editors/transform/transform_mode_timeslide.c
A   source/blender/editors/transform/transform_mode_timetranslate.c
A   source/blender/editors/transform/transform_mode_tosphere.c
A   source/blender/editors/transform/transform_mode_trackball.c
A   source/blender/editors/transform/transform_mode_translate.c
A   source/blender/editors/transform/transform_mode_vert_slide.c

===

diff --git a/source/blender/editors/transform/CMakeLists.txt 
b/source/blender/editors/transform/CMakeLists.txt
index 6f39a8c3b9c..cd831256d83 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -67,12 +67,44 @@ set(SRC
   transform_input.c
   transform_ops.c
   transform_orientations.c
+  transform_mode.c
+  transform_mode_align.c
+  transform_mode_baketime.c
+  transform_mode_bend.c
+  transform_mode_boneenvelope.c
+  transform_mode_boneroll.c
+  transform_mode_bonesize.c
+  transform_mode_curveshrinkfatten.c
+  transform_mode_edge_bevelweight.c
+  transform_mode_edge_crease.c
+  transform_mode_edge_rotate_normal.c
+  transform_mode_edge_seq_slide.c
+  transform_mode_edge_slide.c
+  transform_mode_gpopacity.c
+  transform_mode_gpshrinkfatten.c
+  transform_mode_maskshrinkfatten.c
+  transform_mode_mirror.c
+  transform_mode_push_pull.c
+  transform_mode_resize.c
+  transform_mode_rotate.c
+  transform_mode_shear.c
+  transform_mode_shrink_fatten.c
+  transform_mode_skin_resize.c
+  transform_mode_tilt.c
+  transform_mode_timescale.c
+  transform_mode_timeslide.c
+  transform_mode_timetranslate.c
+  transform_mode_tosphere.c
+  transform_mode_trackball.c
+  transform_mode_translate.c
+  transform_mode_vert_slide.c
   transform_snap.c
   transform_snap_object.c
 
   transform.h
   transform_convert.h
   transform_draw_cursors.h
+  transform_mode.h
   transform_snap.h
 )
 
diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index 24efa33bdfa..e00af488f46 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -22,73 +22,41 @@
  */
 
 #include 
-#include 
-#include 
-#include 
-#include 
 
 #include "MEM_guardedalloc.h"
 
-#include "DNA_anim_types.h"
 #include "DNA_armature_types.h"
-#include "DNA_constraint_types.h"
+#include "DNA_gpencil_types.h"
 #include "DNA_mask_types.h"
 #include "DNA_mesh_types.h"
-#incl

[Bf-blender-cvs] [13e5e55f3f4] master: Cloth: Optimization in self collision

2020-02-13 Thread mano-wii
Commit: 13e5e55f3f4da42e3a648542441a3c35cae6d12b
Author: mano-wii
Date:   Thu Feb 13 10:39:21 2020 -0300
Branches: master
https://developer.blender.org/rB13e5e55f3f4da42e3a648542441a3c35cae6d12b

Cloth: Optimization in self collision

15% to 20% improvement in cloth simulation performance with
self-collision.

The idea is to reduce the number of collisions computed by avoiding
overlapping tris with the same combination (eg. (1,0) and (0,1)).

Reviewed By: zeddb

Differential Revision: https://developer.blender.org/D6474

===

M   source/blender/blenkernel/intern/collision.c

===

diff --git a/source/blender/blenkernel/intern/collision.c 
b/source/blender/blenkernel/intern/collision.c
index 5db42618a9e..5d4753e7ef1 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -598,8 +598,13 @@ static float compute_collision_point_edge_tri(const float 
a1[3],
 }
 
 // w3 is not perfect
-static void collision_compute_barycentric(
-const float pv[3], float p1[3], float p2[3], float p3[3], float *w1, float 
*w2, float *w3)
+static void collision_compute_barycentric(const float pv[3],
+  const float p1[3],
+  const float p2[3],
+  const float p3[3],
+  float *w1,
+  float *w2,
+  float *w3)
 {
   /* dot_v3v3 */
 #define INPR(v1, v2) ((v1)[0] * (v2)[0] + (v1)[1] * (v2)[1] + (v1)[2] * 
(v2)[2])
@@ -646,8 +651,13 @@ static void collision_compute_barycentric(
 #  pragma GCC diagnostic ignored "-Wdouble-promotion"
 #endif
 
-DO_INLINE void collision_interpolateOnTriangle(
-float to[3], float v1[3], float v2[3], float v3[3], double w1, double w2, 
double w3)
+DO_INLINE void collision_interpolateOnTriangle(float to[3],
+   const float v1[3],
+   const float v2[3],
+   const float v3[3],
+   const double w1,
+   const double w2,
+   const double w3)
 {
   zero_v3(to);
   VECADDMUL(to, v1, w1);
@@ -867,6 +877,31 @@ static int 
cloth_collision_response_static(ClothModifierData *clmd,
   return result;
 }
 
+static void cloth_selfcollision_impulse_vert(const float clamp_sq,
+ const float impulse[3],
+ struct ClothVertex *vert)
+{
+  float impulse_len_sq = len_squared_v3(impulse);
+
+  if ((clamp_sq > 0.0f) && (impulse_len_sq > clamp_sq)) {
+return;
+  }
+
+  if (ABS(vert->impulse[0]) < ABS(impulse[0])) {
+vert->impulse[0] = impulse[0];
+  }
+
+  if (ABS(vert->impulse[1]) < ABS(impulse[1])) {
+vert->impulse[1] = impulse[1];
+  }
+
+  if (ABS(vert->impulse[2]) < ABS(impulse[2])) {
+vert->impulse[2] = impulse[2];
+  }
+
+  vert->impulse_count++;
+}
+
 static int cloth_selfcollision_response_static(ClothModifierData *clmd,
CollPair *collpair,
uint collision_count,
@@ -881,11 +916,8 @@ static int 
cloth_selfcollision_response_static(ClothModifierData *clmd,
   cloth1 = clmd->clothObject;
 
   for (int i = 0; i < collision_count; i++, collpair++) {
-float i1[3], i2[3], i3[3];
-
-zero_v3(i1);
-zero_v3(i2);
-zero_v3(i3);
+float ia[3][3] = {{0.0f}};
+float ib[3][3] = {{0.0f}};
 
 /* Only handle static collisions here. */
 if (collpair->flag & (COLLISION_IN_FUTURE | COLLISION_INACTIVE)) {
@@ -959,22 +991,25 @@ static int 
cloth_selfcollision_response_static(ClothModifierData *clmd,
 
 impulse = magtangent / 1.5;
 
-VECADDMUL(i1, vrel_t_pre, w1 * impulse);
-VECADDMUL(i2, vrel_t_pre, w2 * impulse);
-VECADDMUL(i3, vrel_t_pre, w3 * impulse);
+VECADDMUL(ia[0], vrel_t_pre, w1 * impulse);
+VECADDMUL(ia[1], vrel_t_pre, w2 * impulse);
+VECADDMUL(ia[2], vrel_t_pre, w3 * impulse);
+
+VECADDMUL(ib[0], vrel_t_pre, -u1 * impulse);
+VECADDMUL(ib[1], vrel_t_pre, -u2 * impulse);
+VECADDMUL(ib[2], vrel_t_pre, -u3 * impulse);
   }
 
   /* Apply velocity stopping impulse. */
   impulse = magrelVel / 3.0f;
 
-  VECADDMUL(i1, collpair->normal, w1 * impulse);
-  cloth1->verts[collpair->ap1].impulse_count++;
-
-  VECADDMUL(i2, collpair->normal, w2 * impulse);
-  cloth1->verts[collpair->ap2].impulse_count++;
+  VECADDMUL(ia[0], collpair->normal, w1 * 

[Bf-blender-cvs] [24b5d5aa616] master: Modifiers: Weld Modifier - simplify invert_vgroup code

2020-02-12 Thread mano-wii
Commit: 24b5d5aa61682d44376d28097fc0a8f9c5c397bb
Author: mano-wii
Date:   Wed Feb 12 08:35:27 2020 -0300
Branches: master
https://developer.blender.org/rB24b5d5aa61682d44376d28097fc0a8f9c5c397bb

Modifiers: Weld Modifier - simplify invert_vgroup code

No functional change

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index 64a0667a41a..1f641e56c76 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -37,6 +37,7 @@
 
 #include "DNA_mesh_types.h"
 #include "DNA_meshdata_types.h"
+#include "DNA_modifier_types.h"
 #include "DNA_object_types.h"
 
 #include "BKE_deform.h"
@@ -1623,7 +1624,6 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
   const MPoly *mpoly, *mp;
   uint totvert, totedge, totloop, totpoly;
   uint i;
-  const bool invert_vgroup = (wmd->flag & MOD_WELD_INVERT_VGROUP) != 0;
 
   mvert = mesh->mvert;
   totvert = mesh->totvert;
@@ -1634,12 +1634,12 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
 MDeformVert *dvert, *dv;
 dvert = CustomData_get_layer(>vdata, CD_MDEFORMVERT);
 if (dvert) {
+  const bool invert_vgroup = (wmd->flag & MOD_WELD_INVERT_VGROUP) != 0;
   dv = [0];
   v_mask = BLI_BITMAP_NEW(totvert, __func__);
   for (i = 0; i < totvert; i++, dv++) {
-const bool found = invert_vgroup ? 1.0f - defvert_find_weight(dv, 
defgrp_index) > 0.0f :
-   defvert_find_weight(dv, 
defgrp_index) > 0.0f;
-if (found) {
+const bool found = defvert_find_weight(dv, defgrp_index) > 0.0f;
+if (found != invert_vgroup) {
   BLI_BITMAP_ENABLE(v_mask, i);
   v_mask_act++;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [efbe4fd6c29] master: Merge branch 'blender-v2.82-release'

2020-02-11 Thread mano-wii
Commit: efbe4fd6c299325054c8f430541cf18f03940f64
Author: mano-wii
Date:   Tue Feb 11 11:46:04 2020 -0300
Branches: master
https://developer.blender.org/rBefbe4fd6c299325054c8f430541cf18f03940f64

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c939b4df18e] blender-v2.82-release: Fix Attempt to free NULL pointer

2020-02-11 Thread mano-wii
Commit: c939b4df18e9c8f2c4e1fafce5e9325840185a0b
Author: mano-wii
Date:   Tue Feb 11 11:45:07 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rBc939b4df18e9c8f2c4e1fafce5e9325840185a0b

Fix Attempt to free NULL pointer

Assert when snapping `Selection to ...` but without objects.
Missed in the last commit.

===

M   source/blender/editors/space_view3d/view3d_snap.c

===

diff --git a/source/blender/editors/space_view3d/view3d_snap.c 
b/source/blender/editors/space_view3d/view3d_snap.c
index 543dd88d38b..020e44ef0c3 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -554,7 +554,10 @@ static int snap_selected_to_location(bContext *C,
 DEG_id_tag_update(>id, ID_RECALC_TRANSFORM);
   }
 }
-MEM_freeN(objects);
+
+if (objects) {
+  MEM_freeN(objects);
+}
 
 if (use_transform_skip_children) {
   ED_object_xform_skip_child_container_update_all(xcs, bmain, depsgraph);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [dac4e48bb7f] blender-v2.82-release: Fix Attempt to free NULL pointer

2020-02-11 Thread mano-wii
Commit: dac4e48bb7f53f6b6ad509a13071e9ad8f1ca266
Author: mano-wii
Date:   Tue Feb 11 11:25:36 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rBdac4e48bb7f53f6b6ad509a13071e9ad8f1ca266

Fix Attempt to free NULL pointer

Assert when snapping `Selection to ...` but without objects.

===

M   source/blender/editors/space_view3d/view3d_snap.c

===

diff --git a/source/blender/editors/space_view3d/view3d_snap.c 
b/source/blender/editors/space_view3d/view3d_snap.c
index 33930efdd52..543dd88d38b 100644
--- a/source/blender/editors/space_view3d/view3d_snap.c
+++ b/source/blender/editors/space_view3d/view3d_snap.c
@@ -261,7 +261,10 @@ static int snap_sel_to_grid_exec(bContext *C, wmOperator 
*UNUSED(op))
 
   DEG_id_tag_update(>id, ID_RECALC_TRANSFORM);
 }
-MEM_freeN(objects_eval);
+
+if (objects_eval) {
+  MEM_freeN(objects_eval);
+}
 
 if (use_transform_skip_children) {
   ED_object_xform_skip_child_container_update_all(xcs, bmain, depsgraph);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [14d1dc5df56] master: Fix T61138: Difficulty in aligning handles of Stroke of type Curve

2020-02-10 Thread mano-wii
Commit: 14d1dc5df565bdd3970579b31da9b2a26c306448
Author: mano-wii
Date:   Mon Feb 10 08:17:26 2020 -0300
Branches: master
https://developer.blender.org/rB14d1dc5df565bdd3970579b31da9b2a26c306448

Fix T61138: Difficulty in aligning handles of Stroke of type Curve

The user has preference to select the center point for alignment.
But in this case, it was not available for selection.

Also prioritizes selection of the middle point over the handles.

Reviewed By: #user_interface, brecht

Differential Revision: https://developer.blender.org/D6780

===

M   source/blender/editors/sculpt_paint/paint_curve.c

===

diff --git a/source/blender/editors/sculpt_paint/paint_curve.c 
b/source/blender/editors/sculpt_paint/paint_curve.c
index 62c31c91f8d..8a98b15088f 100644
--- a/source/blender/editors/sculpt_paint/paint_curve.c
+++ b/source/blender/editors/sculpt_paint/paint_curve.c
@@ -87,39 +87,35 @@ static PaintCurvePoint *paintcurve_point_get_closest(
 {
   PaintCurvePoint *pcp, *closest = NULL;
   int i;
-  float dist, closest_dist = FLT_MAX;
+  float closest_dist = threshold;
 
   for (i = 0, pcp = pc->points; i < pc->tot_points; i++, pcp++) {
-dist = len_manhattan_v2v2(pos, pcp->bez.vec[0]);
-if (dist < threshold) {
-  if (dist < closest_dist) {
-closest = pcp;
-closest_dist = dist;
-if (point) {
-  *point = SEL_F1;
-}
-  }
+float dist[3];
+char point_sel = 0;
+
+dist[0] = len_manhattan_v2v2(pos, pcp->bez.vec[0]);
+dist[1] = len_manhattan_v2v2(pos, pcp->bez.vec[1]);
+dist[2] = len_manhattan_v2v2(pos, pcp->bez.vec[2]);
+
+if (dist[1] < closest_dist) {
+  closest_dist = dist[1];
+  point_sel = SEL_F2;
 }
-if (!ignore_pivot) {
-  dist = len_manhattan_v2v2(pos, pcp->bez.vec[1]);
-  if (dist < threshold) {
-if (dist < closest_dist) {
-  closest = pcp;
-  closest_dist = dist;
-  if (point) {
-*point = SEL_F2;
-  }
-}
-  }
+if (dist[0] < closest_dist) {
+  closest_dist = dist[0];
+  point_sel = SEL_F1;
+}
+if (dist[2] < closest_dist) {
+  closest_dist = dist[2];
+  point_sel = SEL_F3;
 }
-dist = len_manhattan_v2v2(pos, pcp->bez.vec[2]);
-if (dist < threshold) {
-  if (dist < closest_dist) {
-closest = pcp;
-closest_dist = dist;
-if (point) {
-  *point = SEL_F3;
+if (point_sel) {
+  closest = pcp;
+  if (point) {
+if (ignore_pivot && point_sel == SEL_F2) {
+  point_sel = (dist[0] < dist[2]) ? SEL_F1 : SEL_F3;
 }
+*point = point_sel;
   }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b40ac820524] master: Cleanup: transform_convert comment and spacing

2020-02-07 Thread mano-wii
Commit: b40ac820524b1fa7124c38ebd2ac02beb23c048a
Author: mano-wii
Date:   Fri Feb 7 10:02:11 2020 -0300
Branches: master
https://developer.blender.org/rBb40ac820524b1fa7124c38ebd2ac02beb23c048a

Cleanup: transform_convert comment and spacing

===

M   source/blender/editors/transform/transform_convert.h

===

diff --git a/source/blender/editors/transform/transform_convert.h 
b/source/blender/editors/transform/transform_convert.h
index 53ff9952d05..e81a896e062 100644
--- a/source/blender/editors/transform/transform_convert.h
+++ b/source/blender/editors/transform/transform_convert.h
@@ -19,6 +19,7 @@
 
 /** \file
  * \ingroup edtransform
+ * \brief conversion and adaptation of different datablocks to a common struct.
  */
 
 #ifndef __TRANSFORM_CONVERT_H__
@@ -60,28 +61,38 @@ void clipUVData(TransInfo *t);
 
 /* transform_convert_action.c */
 void flushTransIntFrameActionData(TransInfo *t);
+
 /* transform_convert_armature.c */
 void restoreMirrorPoseBones(TransDataContainer *tc);
 void restoreBones(TransDataContainer *tc);
+
 /* transform_convert_graph.c */
 void flushTransGraphData(TransInfo *t);
+
 /* transform_convert_mask.c */
 void flushTransMasking(TransInfo *t);
+
 /* transform_convert_mesh.c */
 void flushTransUVs(TransInfo *t);
 void trans_mesh_customdata_correction_init(TransInfo *t);
 void trans_mesh_customdata_correction_apply(struct TransDataContainer *tc, 
bool is_final);
+
 /* transform_convert_node.c */
 void flushTransNodes(TransInfo *t);
+
 /* transform_convert_object.c */
 void trans_obdata_in_obmode_update_all(struct TransInfo *t);
 void trans_obchild_in_obmode_update_all(struct TransInfo *t);
+
 /* transform_convert_paintcurve.c */
 void flushTransPaintCurve(TransInfo *t);
+
 /* transform_convert_particle.c */
 void flushTransParticles(TransInfo *t);
+
 /* transform_convert_sequencer.c */
 void flushTransSeq(TransInfo *t);
+
 /* transform_convert_tracking.c */
 void flushTransTracking(TransInfo *t);
 
@@ -96,45 +107,62 @@ bool FrameOnMouseSide(char side, float frame, float 
cframe);
 
 /* transform_convert_action.c */
 void createTransActionData(bContext *C, TransInfo *t);
+
 /* transform_convert_armature.c */
 struct bKinematicConstraint *has_targetless_ik(struct bPoseChannel *pchan);
 void createTransPose(TransInfo *t);
 void createTransArmatureVerts(TransInfo *t);
+
 /* transform_convert_cursor.c */
 void createTransCursor_image(TransInfo *t);
 void createTransCursor_view3d(TransInfo *t);
+
 /* transform_convert_curve.c */
 void createTransCurveVerts(TransInfo *t);
+
 /* transform_convert_graph.c */
 void createTransGraphEditData(bContext *C, TransInfo *t);
+
 /* transform_convert_gpencil.c */
 void createTransGPencil(bContext *C, TransInfo *t);
+
 /* transform_convert_lattice.c */
 void createTransLatticeVerts(TransInfo *t);
+
 /* transform_convert_mask.c */
 void createTransMaskingData(bContext *C, TransInfo *t);
+
 /* transform_convert_mball.c */
 void createTransMBallVerts(TransInfo *t);
+
 /* transform_convert_mesh.c */
 void createTransEditVerts(TransInfo *t);
 void createTransEdge(TransInfo *t);
 void createTransUVs(bContext *C, TransInfo *t);
+
 /* transform_convert_nla.c */
 void createTransNlaData(bContext *C, TransInfo *t);
+
 /* transform_convert_node.c */
 void createTransNodeData(bContext *UNUSED(C), TransInfo *t);
+
 /* transform_convert_object.c */
 void clear_trans_object_base_flags(TransInfo *t);
 void createTransObject(bContext *C, TransInfo *t);
 void createTransTexspace(TransInfo *t);
+
 /* transform_convert_paintcurve.c */
 void createTransPaintCurveVerts(bContext *C, TransInfo *t);
+
 /* transform_convert_particle.c */
 void createTransParticleVerts(bContext *C, TransInfo *t);
+
 /* transform_convert_sculpt.c */
 void createTransSculpt(TransInfo *t);
+
 /* transform_convert_sequence.c */
 void createTransSeqData(bContext *C, TransInfo *t);
+
 /* transform_convert_tracking.c */
 void createTransTrackingData(bContext *C, TransInfo *t);
 void cancelTransTracking(TransInfo *t);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d1112ae0d0e] master: Merge branch 'blender-v2.82-release'

2020-02-05 Thread mano-wii
Commit: d1112ae0d0e602fcba58c39147cbcd66fe624564
Author: mano-wii
Date:   Wed Feb 5 22:59:29 2020 -0300
Branches: master
https://developer.blender.org/rBd1112ae0d0e602fcba58c39147cbcd66fe624564

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [00a0f062410] master: Fix T66802: Edge Slide: Unpredictable direction of the edge loop when it is fully occluded

2020-02-05 Thread mano-wii
Commit: 00a0f062410a864e5592ed318ea4228c9dd2b589
Author: mano-wii
Date:   Wed Feb 5 14:42:22 2020 -0300
Branches: master
https://developer.blender.org/rB00a0f062410a864e5592ed318ea4228c9dd2b589

Fix T66802: Edge Slide: Unpredictable direction of the edge loop when it is 
fully occluded

When an edge loop is fully occluded the direction of movement
is not calculated resulting in unpredictable behavior.

So always calculate the direction of the groups of edge loops
but continue preventing occluded edges from affecting `mval_dir`
(global) value.

Differential Revision: https://developer.blender.org/D5247

===

M   source/blender/editors/transform/transform.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index c12821b321b..24efa33bdfa 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -6456,8 +6456,10 @@ static void calcEdgeSlide_mval_range(TransInfo *t,
   }
 
   /* This test is only relevant if object is not wire-drawn! See [#32068]. 
*/
-  if (use_occlude_geometry &&
-  !BMBVH_EdgeVisible(bmbvh, e, t->depsgraph, ar, v3d, tc->obedit)) {
+  bool is_visible = !use_occlude_geometry ||
+BMBVH_EdgeVisible(bmbvh, e, t->depsgraph, ar, v3d, 
tc->obedit);
+
+  if (!is_visible && !use_calc_direction) {
 continue;
   }
 
@@ -6479,11 +6481,13 @@ static void calcEdgeSlide_mval_range(TransInfo *t,
 
   /* global direction */
   dist_sq = dist_squared_to_line_segment_v2(mval, sco_b, sco_a);
-  if ((dist_best_sq == -1.0f) ||
-  /* intentionally use 2d size on 3d vector */
-  (dist_sq < dist_best_sq && (len_squared_v2v2(sco_b, sco_a) > 0.1f))) 
{
-dist_best_sq = dist_sq;
-sub_v3_v3v3(mval_dir, sco_b, sco_a);
+  if (is_visible) {
+if ((dist_best_sq == -1.0f) ||
+/* intentionally use 2d size on 3d vector */
+(dist_sq < dist_best_sq && (len_squared_v2v2(sco_b, sco_a) > 
0.1f))) {
+  dist_best_sq = dist_sq;
+  sub_v3_v3v3(mval_dir, sco_b, sco_a);
+}
   }
 
   if (use_calc_direction) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [354b2a7b1d4] master: Transform: Optimize edge slide

2020-02-05 Thread mano-wii
Commit: 354b2a7b1d45957612845d828648ea15514570c0
Author: mano-wii
Date:   Wed Feb 5 14:20:41 2020 -0300
Branches: master
https://developer.blender.org/rB354b2a7b1d45957612845d828648ea15514570c0

Transform: Optimize edge slide

The current edge slide is executed in this sequence:
- traverses all edges to find the ones selected,
- traverses each vertex of the selected edges,
- traverses each linked edge of the vertex to finally execute the code.

However the list of vertices that are part of selected edges are already
stored in `EdgeSlideData` through the `TransDataEdgeSlideVert *sv;` member.

Therefore, the code can be simplified as follows:
- traverses all `sv` in `EdgeSlideData`,
- get the `sv->v` vertex to finally execute the code.

Differential Revision: https://developer.blender.org/D5277

===

M   source/blender/editors/transform/transform.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index ec39b457082..c12821b321b 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -6388,9 +6388,8 @@ static void calcEdgeSlide_mval_range(TransInfo *t,
  const bool use_occlude_geometry,
  const bool use_calc_direction)
 {
-  TransDataEdgeSlideVert *sv_array = sld->sv;
+  TransDataEdgeSlideVert *sv;
   BMEditMesh *em = BKE_editmesh_from_object(tc->obedit);
-  BMesh *bm = em->bm;
   ARegion *ar = t->ar;
   View3D *v3d = NULL;
   RegionView3D *rv3d = NULL;
@@ -6402,8 +6401,6 @@ static void calcEdgeSlide_mval_range(TransInfo *t,
 
   float mval_start[2], mval_end[2];
   float mval_dir[3], dist_best_sq;
-  BMIter iter;
-  BMEdge *e;
 
   if (t->spacetype == SPACE_VIEW3D) {
 /* background mode support */
@@ -6437,69 +6434,64 @@ static void calcEdgeSlide_mval_range(TransInfo *t,
 copy_vn_fl(loop_maxdist, loop_nr, -1.0f);
   }
 
-  BM_ITER_MESH (e, , bm, BM_EDGES_OF_MESH) {
-if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
-  int i;
+  sv = >sv[0];
+  for (int i = 0; i < sld->totsv; i++, sv++) {
+BMIter iter_other;
+BMEdge *e;
+BMVert *v = sv->v;
 
-  /* search cross edges for visible edge to the mouse cursor,
-   * then use the shared vertex to calculate screen vector*/
-  for (i = 0; i < 2; i++) {
-BMIter iter_other;
-BMEdge *e_other;
-
-BMVert *v = i ? e->v1 : e->v2;
-BM_ITER_ELEM (e_other, _other, v, BM_EDGES_OF_VERT) {
-  /* screen-space coords */
-  float sco_a[3], sco_b[3];
-  float dist_sq;
-  int j, l_nr;
-
-  if (BM_elem_flag_test(e_other, BM_ELEM_SELECT)) {
-continue;
-  }
+UNUSED_VARS_NDEBUG(sv_table); /* silence warning */
+BLI_assert(i == sv_table[BM_elem_index_get(v)]);
 
-  /* This test is only relevant if object is not wire-drawn! See 
[#32068]. */
-  if (use_occlude_geometry &&
-  !BMBVH_EdgeVisible(bmbvh, e_other, t->depsgraph, ar, v3d, 
tc->obedit)) {
-continue;
-  }
+/* search cross edges for visible edge to the mouse cursor,
+ * then use the shared vertex to calculate screen vector*/
+BM_ITER_ELEM (e, _other, v, BM_EDGES_OF_VERT) {
+  /* screen-space coords */
+  float sco_a[3], sco_b[3];
+  float dist_sq;
+  int l_nr;
 
-  BLI_assert(sv_table[BM_elem_index_get(v)] != -1);
-  j = sv_table[BM_elem_index_get(v)];
+  if (BM_elem_flag_test(e, BM_ELEM_SELECT)) {
+continue;
+  }
 
-  if (sv_array[j].v_side[1]) {
-ED_view3d_project_float_v3_m4(ar, sv_array[j].v_side[1]->co, 
sco_b, projectMat);
-  }
-  else {
-add_v3_v3v3(sco_b, v->co, sv_array[j].dir_side[1]);
-ED_view3d_project_float_v3_m4(ar, sco_b, sco_b, projectMat);
-  }
+  /* This test is only relevant if object is not wire-drawn! See [#32068]. 
*/
+  if (use_occlude_geometry &&
+  !BMBVH_EdgeVisible(bmbvh, e, t->depsgraph, ar, v3d, tc->obedit)) {
+continue;
+  }
 
-  if (sv_array[j].v_side[0]) {
-ED_view3d_project_float_v3_m4(ar, sv_array[j].v_side[0]->co, 
sco_a, projectMat);
-  }
-  else {
-add_v3_v3v3(sco_a, v->co, sv_array[j].dir_side[0]);
-ED_view3d_project_float_v3_m4(ar, sco_a, sco_a, projectMat);
-  }
+  if (sv->v_side[1]) {
+ED_view3d_project_float_v3_m4(ar, sv->v_side[1]->co, sco_b, 
projectMat);
+  }
+  else {
+add_v3_v3v3(sco_b, v->co, sv->dir_side[1]);
+ED_view3d_project_float_v3_m4(ar, sco_b, sco_b, projectMat);
+  }
 
-  /* global direction */
-  dist_s

[Bf-blender-cvs] [aea125fe9d2] master: Cleanup: Rearrange ED_armature.h

2020-02-03 Thread mano-wii
Commit: aea125fe9d2db2eaff640e0fc42724f00413a49c
Author: mano-wii
Date:   Mon Feb 3 08:16:10 2020 -0300
Branches: master
https://developer.blender.org/rBaea125fe9d2db2eaff640e0fc42724f00413a49c

Cleanup: Rearrange ED_armature.h

===

M   source/blender/editors/armature/armature_naming.c
M   source/blender/editors/include/ED_armature.h

===

diff --git a/source/blender/editors/armature/armature_naming.c 
b/source/blender/editors/armature/armature_naming.c
index 9a1582679a4..4162e92cfea 100644
--- a/source/blender/editors/armature/armature_naming.c
+++ b/source/blender/editors/armature/armature_naming.c
@@ -79,6 +79,7 @@ static bool editbone_unique_check(void *arg, const char *name)
   return dupli && dupli != data->bone;
 }
 
+/* If bone is already in list, pass it as param to ignore it. */
 void ED_armature_ebone_unique_name(ListBase *edbo, char *name, EditBone *bone)
 {
   struct {
diff --git a/source/blender/editors/include/ED_armature.h 
b/source/blender/editors/include/ED_armature.h
index 7ac42967dda..40f5cade0d5 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -140,56 +140,45 @@ typedef struct EditBone {
   (CHECK_TYPE_INLINE(ebone, EditBone *), \
(((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & 
BONE_EDITMODE_LOCKED)))
 
-/* used in armature_select_hierarchy_exec() */
+/* used in armature_select.c and pose_select.c */
 #define BONE_SELECT_PARENT 0
 #define BONE_SELECT_CHILD 1
 
+/* armature_add.c */
+EditBone *ED_armature_ebone_add(struct bArmature *arm, const char *name);
+EditBone *ED_armature_ebone_add_primitive(struct Object *obedit_arm,
+  float length,
+  bool view_aligned);
+
+/* armature_edit.c */
+float ED_armature_ebone_roll_to_vector(const EditBone *bone,
+   const float new_up_axis[3],
+   const bool axis_only);
+void ED_armature_origin_set(
+struct Main *bmain, struct Object *ob, const float cursor[3], int 
centermode, int around);
+void ED_armature_edit_transform(struct bArmature *arm, const float mat[4][4], 
const bool do_props);
+void ED_armature_transform(struct bArmature *arm, const float mat[4][4], const 
bool do_props);
+
+/* armature_naming.c */
+void ED_armature_ebone_unique_name(struct ListBase *ebones, char *name, 
EditBone *bone);
+void ED_armature_bone_rename(struct Main *bmain,
+ struct bArmature *arm,
+ const char *oldnamep,
+ const char *newnamep);
+void ED_armature_bones_flip_names(struct Main *bmain,
+  struct bArmature *arm,
+  struct ListBase *bones_names,
+  const bool do_strip_numbers);
+
 /* armature_ops.c */
 void ED_operatortypes_armature(void);
 void ED_operatormacros_armature(void);
 void ED_keymap_armature(struct wmKeyConfig *keyconf);
 
-/* editarmature.c */
-void ED_armature_from_edit(struct Main *bmain, struct bArmature *arm);
-void ED_armature_to_edit(struct bArmature *arm);
-void ED_armature_edit_free(struct bArmature *arm);
-
-bool ED_armature_edit_deselect_all(struct Object *obedit);
-bool ED_armature_edit_deselect_all_visible(struct Object *obedit);
-
-bool ED_armature_edit_deselect_all_multi_ex(struct Base **bases, uint 
bases_len);
-bool ED_armature_edit_deselect_all_visible_multi_ex(struct Base **bases, uint 
bases_len);
-bool ED_armature_edit_deselect_all_visible_multi(struct bContext *C);
-
-bool ED_armature_pose_select_pick_with_buffer(struct ViewLayer *view_layer,
-  struct View3D *v3d,
-  struct Base *base,
-  const unsigned int *buffer,
-  short hits,
-  bool extend,
-  bool deselect,
-  bool toggle,
-  bool do_nearest);
-
-void ED_armature_pose_select_in_wpaint_mode(struct ViewLayer *view_layer,
-struct Base *base_select);
-
-bool ED_armature_edit_select_pick(
-struct bContext *C, const int mval[2], bool extend, bool deselect, bool 
toggle);
-
-bool ED_armature_edit_select_op_from_tagged(struct bArmature *arm, const int 
sel_op);
-
+/* armature_relations.c */
 int join_armature_exec(struct bContext *C, struct wmOperator *op);
-float ED_armature_ebone_roll_to_vector(const EditBone *bone,
-   const float new_up_axis[3],
-  

[Bf-blender-cvs] [bf8a26b7453] master: Fix T54292: CrazySpace transform calculation error

2020-01-31 Thread mano-wii
Commit: bf8a26b7453d9b980a77452c3510afba0d35af01
Author: mano-wii
Date:   Fri Jan 31 23:58:32 2020 -0300
Branches: master
https://developer.blender.org/rBbf8a26b7453d9b980a77452c3510afba0d35af01

Fix T54292: CrazySpace transform calculation error

The function `modifiers_disable_subsurf_temporary` disables
temporarily only subsurf modifiers with the `On Cage` option enabled.

But a modifier can act on cage even with this option disabled.

Differential Revision: https://developer.blender.org/D6722

===

M   source/blender/blenkernel/intern/crazyspace.c

===

diff --git a/source/blender/blenkernel/intern/crazyspace.c 
b/source/blender/blenkernel/intern/crazyspace.c
index 33f9b5b1012..85b58da61de 100644
--- a/source/blender/blenkernel/intern/crazyspace.c
+++ b/source/blender/blenkernel/intern/crazyspace.c
@@ -81,17 +81,16 @@ static void set_crazy_vertex_quat(float r_quat[4],
   sub_qt_qtqt(r_quat, q2, q1);
 }
 
-static int modifiers_disable_subsurf_temporary(Object *ob)
+static bool modifiers_disable_subsurf_temporary(struct Scene *scene, Object 
*ob)
 {
-  ModifierData *md;
-  int disabled = 0;
+  bool disabled = false;
+  int cageIndex = modifiers_getCageIndex(scene, ob, NULL, 1);
 
-  for (md = ob->modifiers.first; md; md = md->next) {
+  ModifierData *md = ob->modifiers.first;
+  for (int i = 0; md && i <= cageIndex; i++, md = md->next) {
 if (md->type == eModifierType_Subsurf) {
-  if (md->mode & eModifierMode_OnCage) {
-md->mode ^= eModifierMode_DisableTemporary;
-disabled = 1;
-  }
+  md->mode ^= eModifierMode_DisableTemporary;
+  disabled = true;
 }
   }
 
@@ -108,7 +107,7 @@ float (*BKE_crazyspace_get_mapped_editverts(struct 
Depsgraph *depsgraph, Object
   BMEditMesh *editmesh_eval = mesh_eval->edit_mesh;
 
   /* disable subsurf temporal, get mapped cos, and enable it */
-  if (modifiers_disable_subsurf_temporary(obedit_eval)) {
+  if (modifiers_disable_subsurf_temporary(scene_eval, obedit_eval)) {
 /* need to make new derivemesh */
 makeDerivedMesh(depsgraph, scene_eval, obedit_eval, editmesh_eval, 
_MASK_BAREMESH);
   }
@@ -122,7 +121,7 @@ float (*BKE_crazyspace_get_mapped_editverts(struct 
Depsgraph *depsgraph, Object
   mesh_get_mapped_verts_coords(mesh_eval_cage, vertexcos, nverts);
 
   /* set back the flag, no new cage needs to be built, transform does it */
-  modifiers_disable_subsurf_temporary(obedit_eval);
+  modifiers_disable_subsurf_temporary(scene_eval, obedit_eval);
 
   return vertexcos;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9112d19cf72] master: Merge branch 'blender-v2.82-release'

2020-01-30 Thread mano-wii
Commit: 9112d19cf72d1f5b19046935ec018744a243efd3
Author: mano-wii
Date:   Thu Jan 30 08:40:22 2020 -0300
Branches: master
https://developer.blender.org/rB9112d19cf72d1f5b19046935ec018744a243efd3

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [944ab366578] blender-v2.82-release: BLI_kdopbvh: Prevent division by zero in raycast

2020-01-30 Thread mano-wii
Commit: 944ab366578f2447c6c31370867e689fc661a972
Author: mano-wii
Date:   Thu Jan 30 08:36:35 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB944ab366578f2447c6c31370867e689fc661a972

BLI_kdopbvh: Prevent division by zero in raycast

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 252e7caa149..50381f2fb18 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1819,11 +1819,16 @@ static void 
bvhtree_ray_cast_data_precalc(BVHRayCastData *data, int flag)
 
   for (i = 0; i < 3; i++) {
 data->ray_dot_axis[i] = dot_v3v3(data->ray.direction, 
bvhtree_kdop_axes[i]);
-data->idot_axis[i] = 1.0f / data->ray_dot_axis[i];
 
 if (fabsf(data->ray_dot_axis[i]) < FLT_EPSILON) {
-  data->ray_dot_axis[i] = 0.0;
+  data->ray_dot_axis[i] = 0.0f;
+  /* Sign is not important in this case, `data->index` is adjusted anyway. 
*/
+  data->idot_axis[i] = FLT_MAX;
 }
+else {
+  data->idot_axis[i] = 1.0f / data->ray_dot_axis[i];
+}
+
 data->index[2 * i] = data->idot_axis[i] < 0.0f ? 1 : 0;
 data->index[2 * i + 1] = 1 - data->index[2 * i];
 data->index[2 * i] += 2 * i;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5df494d75c9] master: bmesh_intersect_edges: Don't detect faces if an edge already exists

2020-01-27 Thread mano-wii
Commit: 5df494d75c9a8460951e22b5616859b137684394
Author: mano-wii
Date:   Mon Jan 27 18:31:15 2020 -0300
Branches: master
https://developer.blender.org/rB5df494d75c9a8460951e22b5616859b137684394

bmesh_intersect_edges: Don't detect faces if an edge already exists

For optimization.

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 75cfd99489b..4e3f525f760 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -860,7 +860,6 @@ bool BM_mesh_intersect_edges(
   if (BM_elem_flag_test(e, BM_ELEM_TAG)) {
 continue;
   }
-  BM_elem_flag_enable(e, BM_ELEM_TAG);
 
   BMVert *va, *vb, *va_dest = NULL;
   va = e->v1;
@@ -869,9 +868,16 @@ bool BM_mesh_intersect_edges(
   int v_cut = BM_elem_index_get(va);
   int v_cut_other = BM_elem_index_get(vb);
   if (v_cut == -1 && v_cut_other == -1) {
+if (!BM_elem_flag_test(va, BM_ELEM_TAG) && !BM_elem_flag_test(vb, 
BM_ELEM_TAG)) {
+  /* Ignore edges out of context. */
+  BM_elem_flag_enable(e, BM_ELEM_TAG);
+}
 continue;
   }
 
+  /* Tag to avoid testing again. */
+  BM_elem_flag_enable(e, BM_ELEM_TAG);
+
   if (v_cut == -1) {
 SWAP(BMVert *, va, vb);
 v_cut = v_cut_other;
@@ -900,6 +906,11 @@ bool BM_mesh_intersect_edges(
   v_other_dest = v_other;
 }
 
+if (BM_edge_exists(va_dest, v_other_dest)) {
+  /* No need to detect face. (Optimization). */
+  break;
+}
+
 best_face = bm_vert_pair_best_face_get(
 va_dest, v_other_dest, edgenet, edgenet_len, dist);
 
@@ -925,10 +936,11 @@ bool BM_mesh_intersect_edges(
 BMEdge *e_test = e_net, *e_next = NULL;
 while ((e_test = BM_DISK_EDGE_NEXT(e_test, v_other)) != (e_net)) {
   if (!BM_edge_is_wire(e_test)) {
-if (BM_elem_flag_test(e, BM_ELEM_TAG)) {
+if (BM_elem_flag_test(e_test, BM_ELEM_TAG)) {
   continue;
 }
-if (BM_elem_index_get(e_test->v1) == -1 && 
BM_elem_index_get(e_test->v2) == -1) {
+if (!BM_elem_flag_test(e_test->v1, BM_ELEM_TAG) &&
+!BM_elem_flag_test(e_test->v2, BM_ELEM_TAG)) {
   continue;
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [944956aba87] master: bmesh_intersect_edges: Improve detection of the best_face

2020-01-27 Thread mano-wii
Commit: 944956aba87daf4156f4cff615a089503302d47e
Author: mano-wii
Date:   Mon Jan 27 17:43:12 2020 -0300
Branches: master
https://developer.blender.org/rB944956aba87daf4156f4cff615a089503302d47e

bmesh_intersect_edges: Improve detection of the best_face

`lambda_a` made it more restricted than it should be.

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 0f9bc68afeb..75cfd99489b 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -119,21 +119,19 @@ static bool bm_vert_pair_share_splittable_face_cb(BMFace 
*UNUSED(f),
 
   float co[3];
   float dir[3];
-  float lambda_a;
   float lambda_b;
 
   copy_v3_v3(co, l_a->prev->v->co);
   sub_v3_v3v3(dir, l_a->next->v->co, co);
-  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, _a, _b)) {
-if (IN_RANGE(lambda_a, range_min, range_max) && IN_RANGE(lambda_b, 
range_min, range_max)) {
+  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, NULL, _b)) {
+if (IN_RANGE(lambda_b, range_min, range_max)) {
   return true;
 }
 else {
   copy_v3_v3(co, l_b->prev->v->co);
   sub_v3_v3v3(dir, l_b->next->v->co, co);
-  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, _a, _b)) {
-return IN_RANGE(lambda_a, range_min, range_max) &&
-   IN_RANGE(lambda_b, range_min, range_max);
+  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, NULL, _b)) {
+return IN_RANGE(lambda_b, range_min, range_max);
   }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9291558b63f] master: bmesh_intersect_edges: Fix asserts

2020-01-27 Thread mano-wii
Commit: 9291558b63fb5f0abae5370cfbac4e28f6035491
Author: mano-wii
Date:   Mon Jan 27 17:29:05 2020 -0300
Branches: master
https://developer.blender.org/rB9291558b63fb5f0abae5370cfbac4e28f6035491

bmesh_intersect_edges: Fix asserts

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index b25dc82aac9..0f9bc68afeb 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -145,6 +145,8 @@ static BMFace *bm_vert_pair_best_face_get(
 {
   BMFace *r_best_face = NULL;
 
+  BLI_assert(v_a != v_b);
+
   BMLoop *dummy;
   if (edgenet_len == 1) {
 float data[2][3];
@@ -636,7 +638,7 @@ bool BM_mesh_intersect_edges(
 BLI_bvhtree_insert(tree_edges_act, i, co[0], 2);
   }
   else if (edge_test == EDGE_REMAIN_TO_TEST) {
-BLI_assert(tree_edges_act);
+BLI_assert(tree_edges_remain);
 e->head.index = 0;
 copy_v3_v3(co[0], e->v1->co);
 copy_v3_v3(co[1], e->v2->co);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [67f3941dd59] master: Merge branch 'blender-v2.82-release'

2020-01-27 Thread mano-wii
Commit: 67f3941dd592d8a02d86450e303b6b7e50857c9c
Author: mano-wii
Date:   Mon Jan 27 14:17:51 2020 -0300
Branches: master
https://developer.blender.org/rB67f3941dd592d8a02d86450e303b6b7e50857c9c

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2662ba24380] blender-v2.82-release: Fix T59804: Expose hidden bmesh.ops.symmetrize options in python

2020-01-27 Thread mano-wii
Commit: 2662ba24380471be0972fcaa545995c1514dbc24
Author: mano-wii
Date:   Mon Jan 27 12:59:11 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB2662ba24380471be0972fcaa545995c1514dbc24

Fix T59804: Expose hidden bmesh.ops.symmetrize options in python

The operator actually supports a 6-item enum

Differential Revision: https://developer.blender.org/D6613

===

M   source/blender/bmesh/intern/bmesh_opdefines.c

===

diff --git a/source/blender/bmesh/intern/bmesh_opdefines.c 
b/source/blender/bmesh/intern/bmesh_opdefines.c
index 74d01dca66a..4fa7bf64834 100644
--- a/source/blender/bmesh/intern/bmesh_opdefines.c
+++ b/source/blender/bmesh/intern/bmesh_opdefines.c
@@ -102,6 +102,16 @@ static BMO_FlagSet bmo_enum_axis_xyz[] = {
   {0, NULL},
 };
 
+static BMO_FlagSet bmo_enum_axis_neg_xyz_and_xyz[] = {
+  {0, "-X"},
+  {1, "-Y"},
+  {2, "-Z"},
+  {3, "X"},
+  {4, "Y"},
+  {5, "Z"},
+  {0, NULL},
+};
+
 static BMO_FlagSet bmo_enum_falloff_type[] = {
   {SUBD_FALLOFF_SMOOTH, "SMOOTH"},
   {SUBD_FALLOFF_SPHERE, "SPHERE"},
@@ -2046,7 +2056,7 @@ static BMOpDefine bmo_symmetrize_def = {
   "symmetrize",
   /* slots_in */
   {{"input", BMO_OP_SLOT_ELEMENT_BUF, {BM_VERT | BM_EDGE | BM_FACE}},
-   {"direction", BMO_OP_SLOT_INT, {(int)BMO_OP_SLOT_SUBTYPE_INT_ENUM}, 
bmo_enum_axis_xyz}, /* axis to use */
+   {"direction", BMO_OP_SLOT_INT, {(int)BMO_OP_SLOT_SUBTYPE_INT_ENUM}, 
bmo_enum_axis_neg_xyz_and_xyz}, /* axis to use */
{"dist", BMO_OP_SLOT_FLT}, /* minimum distance */
{{'\0'}},
   },

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2ab5ca81a53] master: Fix T68413: gpu module example in docs produces unexpected results

2020-01-27 Thread mano-wii
Commit: 2ab5ca81a5379cb99dfc134efffe070d4851d311
Author: mano-wii
Date:   Mon Jan 27 10:29:00 2020 -0300
Branches: master
https://developer.blender.org/rB2ab5ca81a5379cb99dfc134efffe070d4851d311

Fix T68413: gpu module example in docs produces unexpected results

===

M   doc/python_api/examples/gpu.5.py

===

diff --git a/doc/python_api/examples/gpu.5.py b/doc/python_api/examples/gpu.5.py
index 855f9a28e44..e05290a9442 100644
--- a/doc/python_api/examples/gpu.5.py
+++ b/doc/python_api/examples/gpu.5.py
@@ -4,6 +4,7 @@ Mesh with Random Vertex Colors
 """
 import bpy
 import gpu
+import bgl
 import numpy as np
 from random import random
 from gpu_extras.batch import batch_for_shader
@@ -30,7 +31,9 @@ batch = batch_for_shader(
 
 
 def draw():
+bgl.glEnable(bgl.GL_DEPTH_TEST)
 batch.draw(shader)
+bgl.glDisable(bgl.GL_DEPTH_TEST)
 
 
 bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [5c82c9bae42] master: Edit Mesh: Auto Merge - Split Edges & Faces - Better logic for splitting faces

2020-01-27 Thread mano-wii
Commit: 5c82c9bae42c2fb3bf191e0100b88ec52930b1bd
Author: mano-wii
Date:   Mon Jan 27 08:37:48 2020 -0300
Branches: master
https://developer.blender.org/rB5c82c9bae42c2fb3bf191e0100b88ec52930b1bd

Edit Mesh: Auto Merge - Split Edges & Faces - Better logic for splitting faces

Differential Revision: https://developer.blender.org/D6626

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c
M   source/blender/bmesh/tools/bmesh_intersect_edges.h
M   source/blender/editors/mesh/editmesh_automerge.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index c3687c5d477..b25dc82aac9 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -57,7 +57,7 @@ struct EDBMSplitBestFaceData {
* Track the range of vertices in edgenet along the faces normal,
* find the lowest since it's most likely to be most co-planar with the face.
*/
-  float best_face_range_on_normal_axis;
+  float best_edgenet_range_on_face_normal;
   BMFace *r_best_face;
 };
 
@@ -76,11 +76,14 @@ static bool 
bm_vert_pair_share_best_splittable_face_cb(BMFace *f,
 SWAP(float, min, max);
   }
 
-  BMVert *v_test = l_b->v;
   BMEdge **e_iter = >edgenet[0];
+  BMEdge *e_next = data->edgenet[1];
+  BMVert *v_test = ELEM((*e_iter)->v1, e_next->v1, e_next->v2) ? (*e_iter)->v2 
: (*e_iter)->v1;
+
   int verts_len = data->edgenet_len - 1;
   for (int i = verts_len; i--; e_iter++) {
 v_test = BM_edge_other_vert(*e_iter, v_test);
+BLI_assert(v_test != NULL);
 if (!BM_face_point_inside_test(f, v_test->co)) {
   return false;
 }
@@ -93,9 +96,9 @@ static bool bm_vert_pair_share_best_splittable_face_cb(BMFace 
*f,
 }
   }
 
-  const float test_face_range_on_normal_axis = max - min;
-  if (test_face_range_on_normal_axis < data->best_face_range_on_normal_axis) {
-data->best_face_range_on_normal_axis = test_face_range_on_normal_axis;
+  const float test_edgenet_range_on_face_normal = max - min;
+  if (test_edgenet_range_on_face_normal < 
data->best_edgenet_range_on_face_normal) {
+data->best_edgenet_range_on_face_normal = 
test_edgenet_range_on_face_normal;
 data->r_best_face = f;
   }
 
@@ -111,114 +114,79 @@ static bool bm_vert_pair_share_splittable_face_cb(BMFace 
*UNUSED(f),
   float(*data)[3] = userdata;
   float *v_a_co = data[0];
   float *v_a_b_dir = data[1];
-
-  float lambda;
-  if (isect_ray_seg_v3(v_a_co, v_a_b_dir, l_a->prev->v->co, l_a->next->v->co, 
)) {
-if (IN_RANGE(lambda, 0.0f, 1.0f)) {
+  const float range_min = -FLT_EPSILON;
+  const float range_max = 1.0f + FLT_EPSILON;
+
+  float co[3];
+  float dir[3];
+  float lambda_a;
+  float lambda_b;
+
+  copy_v3_v3(co, l_a->prev->v->co);
+  sub_v3_v3v3(dir, l_a->next->v->co, co);
+  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, _a, _b)) {
+if (IN_RANGE(lambda_a, range_min, range_max) && IN_RANGE(lambda_b, 
range_min, range_max)) {
   return true;
 }
-else if (isect_ray_seg_v3(v_a_co, v_a_b_dir, l_b->prev->v->co, 
l_b->next->v->co, )) {
-  return IN_RANGE(lambda, 0.0f, 1.0f);
+else {
+  copy_v3_v3(co, l_b->prev->v->co);
+  sub_v3_v3v3(dir, l_b->next->v->co, co);
+  if (isect_ray_ray_v3(v_a_co, v_a_b_dir, co, dir, _a, _b)) {
+return IN_RANGE(lambda_a, range_min, range_max) &&
+   IN_RANGE(lambda_b, range_min, range_max);
+  }
 }
   }
   return false;
 }
 
-void BM_vert_weld_linked_wire_edges_into_linked_faces(
-BMesh *bm, BMVert *v, const float epsilon, BMEdge **r_edgenet[], int 
*r_edgenet_alloc_len)
+static BMFace *bm_vert_pair_best_face_get(
+BMVert *v_a, BMVert *v_b, BMEdge **edgenet, const int edgenet_len, const 
float epsilon)
 {
-  BMEdge **edgenet = *r_edgenet;
-  int edgenet_alloc_len = *r_edgenet_alloc_len;
-
-  BMIter iter;
-  BMEdge *e;
-  BM_ITER_ELEM (e, , v, BM_EDGES_OF_VERT) {
-int edgenet_len = 0;
-BMVert *v_other = v;
-while (BM_edge_is_wire(e)) {
-  if (edgenet_alloc_len == edgenet_len) {
-edgenet_alloc_len = (edgenet_alloc_len + 1) * 2;
-edgenet = MEM_reallocN(edgenet, (edgenet_alloc_len) * 
sizeof(*edgenet));
-  }
-  edgenet[edgenet_len++] = e;
-  v_other = BM_edge_other_vert(e, v_other);
-  if (v_other == v) {
-/* Endless loop. */
-break;
-  }
-
-  BMEdge *e_next = BM_DISK_EDGE_NEXT(e, v_other);
-  if (e_next == e) {
-/* Vert is wire_endpoint. */
-edgenet_len = 0;
-break;
-  }
-
-  BMEdge *e_test = e_next;
-  while ((e_test = BM_DISK_EDGE_NEXT(e_test, v_other)) != e) {
-if (e_test->l) {
-  /* Vert is lin

[Bf-blender-cvs] [21892d55925] master: Merge branch 'blender-v2.82-release'

2020-01-24 Thread mano-wii
Commit: 21892d5592551082590a58a01a4a0961e9cf2acc
Author: mano-wii
Date:   Fri Jan 24 10:07:08 2020 -0300
Branches: master
https://developer.blender.org/rB21892d5592551082590a58a01a4a0961e9cf2acc

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [2bd62ca7eb2] blender-v2.82-release: Fix T73349: X-Ray Mode - snapping through object stop working on value = 1

2020-01-24 Thread mano-wii
Commit: 2bd62ca7eb2cbfae504a0c4d9120c5c7ed916ce9
Author: mano-wii
Date:   Fri Jan 24 10:06:27 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB2bd62ca7eb2cbfae504a0c4d9120c5c7ed916ce9

Fix T73349: X-Ray Mode - snapping through object stop working on value = 1

===

M   source/blender/editors/transform/transform_snap_object.c

===

diff --git a/source/blender/editors/transform/transform_snap_object.c 
b/source/blender/editors/transform/transform_snap_object.c
index 4fe2ae5321b..63b9eb3937a 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -833,7 +833,7 @@ static bool raycastObj(SnapObjectContext *sctx,
 {
   bool retval = false;
   if (use_occlusion_test) {
-if (use_obedit && sctx->use_v3d && XRAY_ENABLED(sctx->v3d_data.v3d)) {
+if (use_obedit && sctx->use_v3d && XRAY_FLAG_ENABLED(sctx->v3d_data.v3d)) {
   /* Use of occlude geometry in editing mode disabled. */
   return false;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [24ebed4d841] master: Fix T51011: bpy.ops.action.new does nothing when invoked from script

2020-01-23 Thread mano-wii
Commit: 24ebed4d841ea9828a869d917a5718c829f09430
Author: mano-wii
Date:   Thu Jan 23 10:43:51 2020 -0300
Branches: master
https://developer.blender.org/rB24ebed4d841ea9828a869d917a5718c829f09430

Fix T51011: bpy.ops.action.new does nothing when invoked from script

The operator always expect to be called form a button.
But this is not always the case.

This does not bring functional changes when not called from python.

===

M   source/blender/editors/space_action/action_data.c

===

diff --git a/source/blender/editors/space_action/action_data.c 
b/source/blender/editors/space_action/action_data.c
index 5ceaefd6309..5fdabea62c1 100644
--- a/source/blender/editors/space_action/action_data.c
+++ b/source/blender/editors/space_action/action_data.c
@@ -211,12 +211,13 @@ static int action_new_exec(bContext *C, wmOperator 
*UNUSED(op))
   PointerRNA ptr, idptr;
   PropertyRNA *prop;
 
+  bAction *oldact = NULL;
+  AnimData *adt = NULL;
   /* hook into UI */
   UI_context_active_but_prop_get_templateID(C, , );
 
   if (prop) {
-bAction *action = NULL, *oldact = NULL;
-AnimData *adt = NULL;
+/* The operator was called from a button. */
 PointerRNA oldptr;
 
 oldptr = RNA_property_pointer_get(, prop);
@@ -229,6 +230,13 @@ static int action_new_exec(bContext *C, wmOperator 
*UNUSED(op))
 else if (ptr.type == _SpaceDopeSheetEditor) {
   adt = ED_actedit_animdata_from_context(C);
 }
+  }
+  else {
+adt = ED_actedit_animdata_from_context(C);
+oldact = adt->action;
+  }
+  {
+bAction *action = NULL;
 
 /* Perform stashing operation - But only if there is an action */
 if (adt && oldact) {
@@ -257,12 +265,14 @@ static int action_new_exec(bContext *C, wmOperator 
*UNUSED(op))
 /* create action */
 action = action_create_new(C, oldact);
 
-/* set this new action
- * NOTE: we can't use actedit_change_action, as this function is also 
called from the NLA
- */
-RNA_id_pointer_create(>id, );
-RNA_property_pointer_set(, prop, idptr, NULL);
-RNA_property_update(C, , prop);
+if (prop) {
+  /* set this new action
+   * NOTE: we can't use actedit_change_action, as this function is also 
called from the NLA
+   */
+  RNA_id_pointer_create(>id, );
+  RNA_property_pointer_set(, prop, idptr, NULL);
+  RNA_property_update(C, , prop);
+}
   }
 
   /* set notifier that keyframes have changed */

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9801678295b] master: Merge branch 'blender-v2.82-release'

2020-01-18 Thread mano-wii
Commit: 9801678295bb76b3c8678e7b1f8aaab61d768001
Author: mano-wii
Date:   Sat Jan 18 15:29:37 2020 -0300
Branches: master
https://developer.blender.org/rB9801678295bb76b3c8678e7b1f8aaab61d768001

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [deb59c25c04] blender-v2.82-release: Weld Modifier: Reduce size of the leaf nodes to half

2020-01-18 Thread mano-wii
Commit: deb59c25c043f5e3ab256791a9012b8feea5e2e4
Author: mano-wii
Date:   Sat Jan 18 15:28:49 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rBdeb59c25c043f5e3ab256791a9012b8feea5e2e4

Weld Modifier: Reduce size of the leaf nodes to half

This improves performance by reducing the amount of false positives.

A self overlap is made, so the distance from the vertices in the
overlap nodes is actually added.

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index 9c8579e1cd3..f96ec9a82e5 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -1602,6 +1602,7 @@ static bool bvhtree_weld_overlap_cb(void *userdata, int 
index_a, int index_b, in
 struct WeldOverlapData *data = userdata;
 const MVert *mvert = data->mvert;
 const float dist_sq = len_squared_v3v3(mvert[index_a].co, 
mvert[index_b].co);
+BLI_assert(dist_sq <= ((data->merge_dist_sq + FLT_EPSILON) * 3));
 return dist_sq <= data->merge_dist_sq;
   }
   return false;
@@ -1646,7 +1647,7 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
   /* TODO: For a better performanse use KD-Tree. */
   struct BVHTreeFromMesh treedata;
   BVHTree *bvhtree = bvhtree_from_mesh_verts_ex(
-  , mvert, totvert, false, v_mask, v_mask_act, wmd->merge_dist, 
2, 6, 0, NULL);
+  , mvert, totvert, false, v_mask, v_mask_act, wmd->merge_dist / 
2, 2, 6, 0, NULL);
 
   if (v_mask) {
 MEM_freeN(v_mask);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b9fa80ed5ac] master: Merge branch 'blender-v2.82-release'

2020-01-17 Thread mano-wii
Commit: b9fa80ed5ac0d108f62d7260b3e1a977f63781db
Author: mano-wii
Date:   Fri Jan 17 09:19:36 2020 -0300
Branches: master
https://developer.blender.org/rBb9fa80ed5ac0d108f62d7260b3e1a977f63781db

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [c22d2f9e015] blender-v2.82-release: Fix T73159: Crash transforming 0 edited grease objects

2020-01-17 Thread mano-wii
Commit: c22d2f9e015a66951b96104dca51d40d40eed1ce
Author: mano-wii
Date:   Fri Jan 17 09:17:36 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rBc22d2f9e015a66951b96104dca51d40d40eed1ce

Fix T73159: Crash transforming 0 edited grease objects

===

M   source/blender/editors/transform/transform_convert_gpencil.c

===

diff --git a/source/blender/editors/transform/transform_convert_gpencil.c 
b/source/blender/editors/transform/transform_convert_gpencil.c
index 234e383be5f..80c0afc3f56 100644
--- a/source/blender/editors/transform/transform_convert_gpencil.c
+++ b/source/blender/editors/transform/transform_convert_gpencil.c
@@ -63,6 +63,10 @@ static void createTransGPencil_center_get(bGPDstroke *gps, 
float r_center[3])
 
 void createTransGPencil(bContext *C, TransInfo *t)
 {
+  if (t->data_container_len == 0) {
+return;
+  }
+
   Depsgraph *depsgraph = CTX_data_ensure_evaluated_depsgraph(C);
   bGPdata *gpd = ED_gpencil_data_get_active(C);
   ToolSettings *ts = CTX_data_tool_settings(C);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [55c70a908ea] master: Merge branch 'blender-v2.82-release'

2020-01-16 Thread mano-wii
Commit: 55c70a908ea979d874a8c441753c67a55ef60e77
Author: mano-wii
Date:   Thu Jan 16 23:34:13 2020 -0300
Branches: master
https://developer.blender.org/rB55c70a908ea979d874a8c441753c67a55ef60e77

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9b3c9ab61a4] blender-v2.82-release: Fix T53178: Casting in Blur node with Relative

2020-01-16 Thread mano-wii
Commit: 9b3c9ab61a4feefc0b2ad2cc9227b81cfe5446d5
Author: mano-wii
Date:   Thu Jan 16 23:32:45 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB9b3c9ab61a4feefc0b2ad2cc9227b81cfe5446d5

Fix T53178: Casting in Blur node with Relative

In this case the user expects rounding.

===

M   source/blender/compositor/operations/COM_BlurBaseOperation.cpp

===

diff --git a/source/blender/compositor/operations/COM_BlurBaseOperation.cpp 
b/source/blender/compositor/operations/COM_BlurBaseOperation.cpp
index 1b2e3b2821e..24c68ddbec7 100644
--- a/source/blender/compositor/operations/COM_BlurBaseOperation.cpp
+++ b/source/blender/compositor/operations/COM_BlurBaseOperation.cpp
@@ -44,20 +44,22 @@ void BlurBaseOperation::initExecution()
   this->m_data.image_in_width = this->getWidth();
   this->m_data.image_in_height = this->getHeight();
   if (this->m_data.relative) {
+int sizex, sizey;
 switch (this->m_data.aspect) {
-  case CMP_NODE_BLUR_ASPECT_NONE:
-this->m_data.sizex = (int)(this->m_data.percentx * 0.01f * 
this->m_data.image_in_width);
-this->m_data.sizey = (int)(this->m_data.percenty * 0.01f * 
this->m_data.image_in_height);
-break;
   case CMP_NODE_BLUR_ASPECT_Y:
-this->m_data.sizex = (int)(this->m_data.percentx * 0.01f * 
this->m_data.image_in_width);
-this->m_data.sizey = (int)(this->m_data.percenty * 0.01f * 
this->m_data.image_in_width);
+sizex = sizey = this->m_data.image_in_width;
 break;
   case CMP_NODE_BLUR_ASPECT_X:
-this->m_data.sizex = (int)(this->m_data.percentx * 0.01f * 
this->m_data.image_in_height);
-this->m_data.sizey = (int)(this->m_data.percenty * 0.01f * 
this->m_data.image_in_height);
+sizex = sizey = this->m_data.image_in_height;
+break;
+  default:
+BLI_assert(this->m_data.aspect == CMP_NODE_BLUR_ASPECT_NONE);
+sizex = this->m_data.image_in_width;
+sizey = this->m_data.image_in_height;
 break;
 }
+this->m_data.sizex = round_fl_to_int(this->m_data.percentx * 0.01f * 
sizex);
+this->m_data.sizey = round_fl_to_int(this->m_data.percenty * 0.01f * 
sizey);
   }
 
   QualityStepHelper::initExecution(COM_QH_MULTIPLY);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e7e454f964f] master: Merge branch 'blender-v2.82-release'

2020-01-16 Thread mano-wii
Commit: e7e454f964f9751dc6664b9e42aff9e87552d8de
Author: mano-wii
Date:   Thu Jan 16 09:16:46 2020 -0300
Branches: master
https://developer.blender.org/rBe7e454f964f9751dc6664b9e42aff9e87552d8de

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9a6551543b9] blender-v2.82-release: Fix crash with Proportional Edit Connected in UV editing

2020-01-16 Thread mano-wii
Commit: 9a6551543b92d54e7d565570988271e461104a89
Author: mano-wii
Date:   Thu Jan 16 09:14:27 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB9a6551543b92d54e7d565570988271e461104a89

Fix crash with Proportional Edit Connected in UV editing

Caused by rB86a2ffc3ab32

===

M   source/blender/editors/transform/transform_convert_mesh.c

===

diff --git a/source/blender/editors/transform/transform_convert_mesh.c 
b/source/blender/editors/transform/transform_convert_mesh.c
index 006f913f218..5d3d1d936a2 100644
--- a/source/blender/editors/transform/transform_convert_mesh.c
+++ b/source/blender/editors/transform/transform_convert_mesh.c
@@ -1451,7 +1451,8 @@ void createTransUVs(bContext *C, TransInfo *t)
 if (is_prop_connected || is_island_center) {
   /* create element map with island information */
   const bool use_facesel = (ts->uv_flag & UV_SYNC_SELECTION) == 0;
-  elementmap = BM_uv_element_map_create(em->bm, scene, use_facesel, true, 
false, true);
+  const bool use_uvsel = !is_prop_connected;
+  elementmap = BM_uv_element_map_create(em->bm, scene, use_facesel, 
use_uvsel, false, true);
   if (elementmap == NULL) {
 continue;
   }
@@ -1547,16 +1548,17 @@ void createTransUVs(bContext *C, TransInfo *t)
 
 if (is_prop_connected || is_island_center) {
   UvElement *element = BM_uv_element_get(elementmap, efa, l);
-
-  if (is_prop_connected) {
-if (!BLI_BITMAP_TEST(island_enabled, element->island)) {
-  count_rejected++;
-  continue;
+  if (element) {
+if (is_prop_connected) {
+  if (!BLI_BITMAP_TEST(island_enabled, element->island)) {
+count_rejected++;
+continue;
+  }
 }
-  }
 
-  if (is_island_center) {
-center = island_center[element->island].co;
+if (is_island_center) {
+  center = island_center[element->island].co;
+}
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3a1745235f1] master: Merge branch 'blender-v2.82-release'

2020-01-14 Thread mano-wii
Commit: 3a1745235f1623aab2f817131a384efc478d2a86
Author: mano-wii
Date:   Tue Jan 14 10:49:45 2020 -0300
Branches: master
https://developer.blender.org/rB3a1745235f1623aab2f817131a384efc478d2a86

Merge branch 'blender-v2.82-release'

===



===



___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0187735eea1] blender-v2.82-release: Fix T70606: 3D cursor oriented by geometry projects on objects displayed as bounds box and wire

2020-01-14 Thread mano-wii
Commit: 0187735eea17ff580f80115bd840747400732fe7
Author: mano-wii
Date:   Tue Jan 14 09:39:46 2020 -0300
Branches: blender-v2.82-release
https://developer.blender.org/rB0187735eea17ff580f80115bd840747400732fe7

Fix T70606: 3D cursor oriented by geometry projects on objects displayed as 
bounds box and wire

===

M   source/blender/editors/space_view3d/view3d_edit.c

===

diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index 45388ce3691..6d0b0e8e00a 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4954,6 +4954,7 @@ void ED_view3d_cursor3d_position_rotation(bContext *C,
&(const struct 
SnapObjectParams){
.snap_select = SNAP_ALL,
.use_object_edit_cage = 
false,
+   .use_occlusion_test = 
true,
},
mval_fl,
NULL,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6d74775a47b] master: Fix T70606: 3D cursor oriented by geometry projects on objects displayed as bounds box and wire

2020-01-14 Thread mano-wii
Commit: 6d74775a47be00e4c62a984c2533c947fa1a402f
Author: mano-wii
Date:   Tue Jan 14 09:39:46 2020 -0300
Branches: master
https://developer.blender.org/rB6d74775a47be00e4c62a984c2533c947fa1a402f

Fix T70606: 3D cursor oriented by geometry projects on objects displayed as 
bounds box and wire

===

M   source/blender/editors/space_view3d/view3d_edit.c

===

diff --git a/source/blender/editors/space_view3d/view3d_edit.c 
b/source/blender/editors/space_view3d/view3d_edit.c
index 45388ce3691..6d0b0e8e00a 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4954,6 +4954,7 @@ void ED_view3d_cursor3d_position_rotation(bContext *C,
&(const struct 
SnapObjectParams){
.snap_select = SNAP_ALL,
.use_object_edit_cage = 
false,
+   .use_occlusion_test = 
true,
},
mval_fl,
NULL,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [389fc62f6c4] master: Fix T72094: Multiple snap targets don't work when Increment is enabled

2020-01-13 Thread mano-wii
Commit: 389fc62f6c4e039902c94c3da36fd24a351c8a8d
Author: mano-wii
Date:   Mon Jan 13 13:47:05 2020 -0300
Branches: master
https://developer.blender.org/rB389fc62f6c4e039902c94c3da36fd24a351c8a8d

Fix T72094: Multiple snap targets don't work when Increment is enabled

The `poll_modal_item` was too restrictive.
`!validSnap(t)` already solves these cases, but for better readability
(and efficiency), I found it best to keep the `tsnap.mode` test.

===

M   source/blender/editors/transform/transform.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index 9a98a2b8a00..62a61a3a05a 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -856,7 +856,7 @@ static bool transform_modal_item_poll(const wmOperator *op, 
int value)
   if (t->spacetype != SPACE_VIEW3D) {
 return false;
   }
-  else if (t->tsnap.mode & (SCE_SNAP_MODE_INCREMENT | SCE_SNAP_MODE_GRID)) 
{
+  else if ((t->tsnap.mode & ~(SCE_SNAP_MODE_INCREMENT | 
SCE_SNAP_MODE_GRID)) == 0) {
 return false;
   }
   else if (!validSnap(t)) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [744a58918a0] master: Fix T72375: Crash when using spin tool

2020-01-09 Thread mano-wii
Commit: 744a58918a0859a782d47ca33c11f6e9f233c044
Author: mano-wii
Date:   Thu Jan 9 11:15:47 2020 -0300
Branches: master
https://developer.blender.org/rB744a58918a0859a782d47ca33c11f6e9f233c044

Fix T72375: Crash when using spin tool

The original geometry referenced in `vtable` was deleted by the
`extrude_face_region` operator.
It is read soon after, so don't delete the original geometry
(param `use_keep_orig`).

This may have a small impact on performance.

===

M   source/blender/bmesh/operators/bmo_dupe.c

===

diff --git a/source/blender/bmesh/operators/bmo_dupe.c 
b/source/blender/bmesh/operators/bmo_dupe.c
index d9a7aa626e4..65b70f62b58 100644
--- a/source/blender/bmesh/operators/bmo_dupe.c
+++ b/source/blender/bmesh/operators/bmo_dupe.c
@@ -543,9 +543,14 @@ void bmo_spin_exec(BMesh *bm, BMOperator *op)
   BMO_op_initf(bm,
,
op->flag,
-   "extrude_face_region geom=%S use_normal_flip=%b 
use_normal_from_adjacent=%b",
+   "extrude_face_region "
+   "geom=%S "
+   "use_keep_orig=%b "
+   "use_normal_flip=%b "
+   "use_normal_from_adjacent=%b",
op,
"geom_last.out",
+   use_merge,
use_normal_flip && (a == 0),
(a != 0));
   BMO_op_exec(bm, );

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f1516e007d9] master: Fix T72288: Left click on empty space inside file browser resets scrolling

2020-01-08 Thread mano-wii
Commit: f1516e007d9c9f72218c3256eaa1b478a6c25052
Author: mano-wii
Date:   Wed Jan 8 16:45:09 2020 +0100
Branches: master
https://developer.blender.org/rBf1516e007d9c9f72218c3256eaa1b478a6c25052

Fix T72288: Left click on empty space inside file browser resets scrolling

Wasn't checking if there actually is a selection.

===

M   source/blender/editors/space_file/file_ops.c

===

diff --git a/source/blender/editors/space_file/file_ops.c 
b/source/blender/editors/space_file/file_ops.c
index 77e6266b830..61eb4db8300 100644
--- a/source/blender/editors/space_file/file_ops.c
+++ b/source/blender/editors/space_file/file_ops.c
@@ -322,7 +322,7 @@ static FileSelect file_select(
   if (select != FILE_SEL_ADD && !file_is_any_selected(sfile->files)) {
 sfile->params->active_file = -1;
   }
-  else {
+  else if (sel.last >= 0) {
 ARegion *ar = CTX_wm_region(C);
 const FileLayout *layout = ED_fileselect_get_layout(sfile, ar);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [15ef1d4c802] master: Fix T72119: UV/Image Editor theme face colors with no effect

2020-01-08 Thread mano-wii
Commit: 15ef1d4c8026aea3319efdc118a2189d7d71b450
Author: mano-wii
Date:   Wed Jan 8 09:21:25 2020 -0300
Branches: master
https://developer.blender.org/rB15ef1d4c8026aea3319efdc118a2189d7d71b450

Fix T72119: UV/Image Editor theme face colors with no effect

The `in int flag;` in `gpu_shader_2D_edituvs_faces_vert.glsl`
don't have the values `FACE_UV_ACTIVE` and `FACE_UV_SELECT`.

Add face flags then.

Original patch is from @EitanSomething

Differential revision: https://developer.blender.org/D6520

===

M   source/blender/draw/intern/draw_cache_extract_mesh.c

===

diff --git a/source/blender/draw/intern/draw_cache_extract_mesh.c 
b/source/blender/draw/intern/draw_cache_extract_mesh.c
index e43c45a953d..c98494ebdd9 100644
--- a/source/blender/draw/intern/draw_cache_extract_mesh.c
+++ b/source/blender/draw/intern/draw_cache_extract_mesh.c
@@ -2671,6 +2671,7 @@ static void extract_edituv_data_loop_bmesh(const 
MeshRenderData *mr,
   EditLoopData *eldata = data->vbo_data + l;
   memset(eldata, 0x0, sizeof(*eldata));
   mesh_render_data_loop_flag(mr, loop, data->cd_ofs, eldata);
+  mesh_render_data_face_flag(mr, loop->f, data->cd_ofs, eldata);
   mesh_render_data_loop_edge_flag(mr, loop, data->cd_ofs, eldata);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [bd766f8f060] master: Fix T72935: Applying transform to parent mesh changes rotation of children using quaternions

2020-01-07 Thread mano-wii
Commit: bd766f8f0608d04c473544274b8dd9dcc00ec39a
Author: mano-wii
Date:   Tue Jan 7 12:42:37 2020 -0300
Branches: master
https://developer.blender.org/rBbd766f8f0608d04c473544274b8dd9dcc00ec39a

Fix T72935: Applying transform to parent mesh changes rotation of children 
using quaternions

`ob->quat` is `v4`.

===

M   source/blender/blenkernel/intern/object.c

===

diff --git a/source/blender/blenkernel/intern/object.c 
b/source/blender/blenkernel/intern/object.c
index 10553e73d8d..1378e862034 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -1323,7 +1323,7 @@ void BKE_object_transform_copy(Object *ob_tar, const 
Object *ob_src)
 {
   copy_v3_v3(ob_tar->loc, ob_src->loc);
   copy_v3_v3(ob_tar->rot, ob_src->rot);
-  copy_v3_v3(ob_tar->quat, ob_src->quat);
+  copy_v4_v4(ob_tar->quat, ob_src->quat);
   copy_v3_v3(ob_tar->rotAxis, ob_src->rotAxis);
   ob_tar->rotAngle = ob_src->rotAngle;
   ob_tar->rotmode = ob_src->rotmode;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [e665c2c8932] master: Fix T69314: Broken Rotation to Deltas for Quaternions

2020-01-07 Thread mano-wii
Commit: e665c2c89326f4b13270d0d5d5082b5368413371
Author: mano-wii
Date:   Tue Jan 7 11:52:44 2020 -0300
Branches: master
https://developer.blender.org/rBe665c2c89326f4b13270d0d5d5082b5368413371

Fix T69314: Broken Rotation to Deltas for Quaternions

===

M   release/scripts/startup/bl_operators/object.py

===

diff --git a/release/scripts/startup/bl_operators/object.py 
b/release/scripts/startup/bl_operators/object.py
index c42d5970ed9..12d7984b3b2 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -743,7 +743,9 @@ class TransformsToDeltas(Operator):
 def transfer_rotation(self, obj):
 # TODO: add transforms together...
 if obj.rotation_mode == 'QUATERNION':
-obj.delta_rotation_quaternion += obj.rotation_quaternion
+delta = obj.delta_rotation_quaternion.copy()
+obj.delta_rotation_quaternion = obj.rotation_quaternion
+obj.delta_rotation_quaternion.rotate(delta)
 
 if self.reset_values:
 obj.rotation_quaternion.identity()

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0bd598d388b] master: bmesh_intersect_edges: Remove unnecessary index setting

2020-01-07 Thread mano-wii
Commit: 0bd598d388b4d64e2d9ab4b8a84768beb30b8625
Author: mano-wii
Date:   Tue Jan 7 11:50:09 2020 -0300
Branches: master
https://developer.blender.org/rB0bd598d388b4d64e2d9ab4b8a84768beb30b8625

bmesh_intersect_edges: Remove unnecessary index setting

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 6801501e95b..c3687c5d477 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -552,13 +552,11 @@ bool BM_mesh_intersect_edges(BMesh *bm, const char hflag, 
const float dist, GHas
   BM_ITER_MESH (v, , bm, BM_VERTS_OF_MESH) {
 if (BM_elem_flag_test(v, hflag)) {
   BM_elem_flag_enable(v, BM_ELEM_TAG);
-  v->head.index = -1;
   verts_act_len++;
 }
 else {
   BM_elem_flag_disable(v, BM_ELEM_TAG);
   if (!BM_elem_flag_test(v, BM_ELEM_HIDDEN)) {
-v->head.index = -1;
 verts_remain_len++;
   }
 }
@@ -827,7 +825,6 @@ bool BM_mesh_intersect_edges(BMesh *bm, const char hflag, 
const float dist, GHas
   e = pair_elem->edge;
 
   BMVert *v_new = BM_edge_split(bm, e, e->v1, NULL, lambda);
-  v_new->head.index = -1;
   pair_elem->vert = v_new;
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [55fbb0fd691] master: BM_mesh_intersect: Match the mesh in Debug build with Release

2020-01-06 Thread mano-wii
Commit: 55fbb0fd691e61745c0f3f9dc947155231387b7e
Author: mano-wii
Date:   Mon Jan 6 12:33:36 2020 -0300
Branches: master
https://developer.blender.org/rB55fbb0fd691e61745c0f3f9dc947155231387b7e

BM_mesh_intersect: Match the mesh in Debug build with Release

Prevents regression in unit tests.

===

M   source/blender/bmesh/tools/bmesh_intersect.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect.c 
b/source/blender/bmesh/tools/bmesh_intersect.c
index 9a3cade85db..df88dcf3006 100644
--- a/source/blender/bmesh/tools/bmesh_intersect.c
+++ b/source/blender/bmesh/tools/bmesh_intersect.c
@@ -1082,7 +1082,15 @@ bool BM_mesh_intersect(BMesh *bm,
 tree_b = tree_a;
   }
 
-  overlap = BLI_bvhtree_overlap(tree_b, tree_a, _overlap_tot, NULL, NULL);
+  int flag = BVH_OVERLAP_USE_THREADING | BVH_OVERLAP_RETURN_PAIRS;
+#  if DEBUG
+  /* The overlap result must match that obtained in Release to succeed
+   * in the `bmesh_boolean` test. */
+  if (looptris_tot < 1024) {
+flag &= ~BVH_OVERLAP_USE_THREADING;
+  }
+#  endif
+  overlap = BLI_bvhtree_overlap_ex(tree_b, tree_a, _overlap_tot, NULL, 
NULL, 0, flag);
 
   if (overlap) {
 uint i;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [7213c42b6e5] master: Fix BKE_mesh_validate_arrays invalidating face selection

2020-01-06 Thread mano-wii
Commit: 7213c42b6e55c55f14472dbb9440d4628122bec8
Author: mano-wii
Date:   Mon Jan 6 09:26:07 2020 -0300
Branches: master
https://developer.blender.org/rB7213c42b6e55c55f14472dbb9440d4628122bec8

Fix BKE_mesh_validate_arrays invalidating face selection

Use `totpoly` instead of `totface`.

The original code was written for non-bmesh case and likely missed this
update.

===

M   source/blender/blenkernel/intern/mesh_validate.c

===

diff --git a/source/blender/blenkernel/intern/mesh_validate.c 
b/source/blender/blenkernel/intern/mesh_validate.c
index fa03aec3e08..4aa5bfa04ab 100644
--- a/source/blender/blenkernel/intern/mesh_validate.c
+++ b/source/blender/blenkernel/intern/mesh_validate.c
@@ -866,7 +866,7 @@ bool BKE_mesh_validate_arrays(Mesh *mesh,
   tot_elem = mesh->totedge;
   break;
 case ME_FSEL:
-  tot_elem = mesh->totface;
+  tot_elem = mesh->totpoly;
   break;
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b15f601d2ce] master: Edit Mesh: Use multithreading in other parts of Auto Merge & Split

2020-01-05 Thread mano-wii
Commit: b15f601d2ce34fc10cc0bfe515fb89f6189f582b
Author: mano-wii
Date:   Sun Jan 5 14:22:47 2020 -0300
Branches: master
https://developer.blender.org/rBb15f601d2ce34fc10cc0bfe515fb89f6189f582b

Edit Mesh: Use multithreading in other parts of Auto Merge & Split

In the Auto Merge & Split feature, multithreading was only used to
find duplicates between vertex and another vertex.

But with this patch, multithreading is now used to find intersections
etween edge and edge and between edge and vertex.

In my tests I noticed a performance improvement of around 180%
(0.017151 secs to 0.009373 secs)

Differential Revision: https://developer.blender.org/D6528

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 066c66a3346..6801501e95b 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -29,12 +29,17 @@
 
 #include "BKE_bvhutils.h"
 
+#include "atomic_ops.h"
+
 #include "bmesh.h"
 
 #include "bmesh_intersect_edges.h" /* own include */
 
+//#define INTERSECT_EDGES_DEBUG
+
 #define KDOP_TREE_TYPE 4
 #define KDOP_AXIS_LEN 14
+#define BLI_STACK_PAIR_LEN 2 * KDOP_TREE_TYPE
 
 /*  */
 /** \name Weld Linked Wire Edges into Linked Faces
@@ -261,11 +266,13 @@ static void bm_edge_pair_elem_setup(BMEdge *e,
   r_pair_elem->edge = e;
   r_pair_elem->lambda = lambda;
 
-  e->head.index++;
-  /* Obs: Check Multithread. */
-  if (BM_elem_flag_test(e, BM_ELEM_TAG)) {
-BM_elem_flag_disable(e, BM_ELEM_TAG);
-(*r_data_cut_edges_len)++;
+  /* Even though we have multiple atomic operations, this is fine here, since
+   * there is no dependency on order.
+   * The `e->head.index` check + atomic increment will ever be true once, as
+   * expected. We don't care which instance of the code actually ends up
+   * incrementing `r_data_cut_edge_len`, so there is no race condition here. */
+  if (atomic_fetch_and_add_int32(>head.index, 1) == 0) {
+atomic_fetch_and_add_int32(r_data_cut_edges_len, 1);
   }
 }
 
@@ -303,10 +310,10 @@ static bool bm_edgexvert_isect_impl(BMVert *v,
   return false;
 }
 
-float near[3];
-madd_v3_v3v3fl(near, co, dir, lambda);
+float closest[3];
+madd_v3_v3v3fl(closest, co, dir, lambda);
 
-float dist_sq = len_squared_v3v3(v->co, near);
+float dist_sq = len_squared_v3v3(v->co, closest);
 if (dist_sq < data_dist_sq) {
   bm_edge_pair_elem_setup(e, lambda, data_cut_edges_len, _pair[0]);
   bm_vert_pair_elem_setup_ex(v, _pair[1]);
@@ -476,22 +483,16 @@ static void bm_elemxelem_bvhtree_overlap(const BVHTree 
*tree1,
  const BVHTree *tree2,
  BVHTree_OverlapCallback callback,
  struct EDBMSplitData *data,
- BLI_Stack **pair_stack,
- bool use_thread)
+ BLI_Stack **pair_stack)
 {
-  int flag = 0;
-  int thread_num = 1;
-  if (use_thread) {
-flag |= BVH_OVERLAP_USE_THREADING;
-thread_num = BLI_bvhtree_overlap_thread_num(tree1);
-  }
-  for (int i = 0; i < thread_num; i++) {
+  int parallel_tasks_num = BLI_bvhtree_overlap_thread_num(tree1);
+  for (int i = 0; i < parallel_tasks_num; i++) {
 if (pair_stack[i] == NULL) {
   pair_stack[i] = BLI_stack_new(sizeof(struct EDBMSplitElem[2]), __func__);
 }
   }
   data->pair_stack = pair_stack;
-  BLI_bvhtree_overlap_ex(tree1, tree2, NULL, callback, data, 1, flag);
+  BLI_bvhtree_overlap_ex(tree1, tree2, NULL, callback, data, 1, 
BVH_OVERLAP_USE_THREADING);
 }
 
 /*  */
@@ -514,6 +515,8 @@ static int sort_cmp_by_lambda_cb(const void *index1_v, 
const void *index2_v, voi
 /*  */
 /* Main API */
 
+#define INTERSECT_EDGES
+
 bool BM_mesh_intersect_edges(BMesh *bm, const char hflag, const float dist, 
GHash *r_targetmap)
 {
   bool ok = false;
@@ -527,7 +530,9 @@ bool BM_mesh_intersect_edges(BMesh *bm, const char hflag, 
const float dist, GHas
   struct EDBMSplitElem(*pair_iter)[2], (*pair_array)[2] = NULL;
   int pair_len = 0;
 
-  BLI_Stack *pair_stack[KDOP_TREE_TYPE] = {NULL};
+  BLI_Stack *pair_stack[BLI_STACK_PAIR_LEN] = {NULL};
+  BLI_Stack **pair_stack_vertxvert = pair_stack;
+  BLI_Stack **pair_stack_edgexelem = _stack[KDOP_TREE_TYPE];
 
   const float dist_sq = SQUARE(dist);
   const float dist_half = dist / 2;
@@ -586,7 +591,7 @@ 

[Bf-blender-cvs] [952bc89d6ee] master: BLI_kdopbvh: Deduplicate code

2020-01-04 Thread mano-wii
Commit: 952bc89d6ee3248aa2c577e4024ba11da45992c6
Author: mano-wii
Date:   Sat Jan 4 16:56:01 2020 -0300
Branches: master
https://developer.blender.org/rB952bc89d6ee3248aa2c577e4024ba11da45992c6

BLI_kdopbvh: Deduplicate code

No need to create different callbacks for `BLI_task_parallel_range`,
these callbacks are called a few times.

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 5a34626e335..252e7caa149 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1187,9 +1187,9 @@ static void 
tree_overlap_traverse_cb(BVHOverlapData_Thread *data_thread,
 /**
  * a version of #tree_overlap_traverse_cb that that break on first true return.
  */
-static bool tree_overlap_num_recursive(BVHOverlapData_Thread *data_thread,
-   const BVHNode *node1,
-   const BVHNode *node2)
+static bool tree_overlap_traverse_num(BVHOverlapData_Thread *data_thread,
+  const BVHNode *node1,
+  const BVHNode *node2)
 {
   BVHOverlapData_Shared *data = data_thread->shared;
   int j;
@@ -1219,7 +1219,7 @@ static bool 
tree_overlap_num_recursive(BVHOverlapData_Thread *data_thread,
   }
   else {
 for (j = 0; j < node2->totnode; j++) {
-  if (tree_overlap_num_recursive(data_thread, node1, 
node2->children[j])) {
+  if (tree_overlap_traverse_num(data_thread, node1, 
node2->children[j])) {
 return true;
   }
 }
@@ -1228,7 +1228,7 @@ static bool 
tree_overlap_num_recursive(BVHOverlapData_Thread *data_thread,
 else {
   const uint max_interactions = data_thread->max_interactions;
   for (j = 0; j < node1->totnode; j++) {
-if (tree_overlap_num_recursive(data_thread, node1->children[j], 
node2)) {
+if (tree_overlap_traverse_num(data_thread, node1->children[j], node2)) 
{
   data_thread->max_interactions = max_interactions;
 }
   }
@@ -1254,7 +1254,12 @@ static void bvhtree_overlap_task_cb(void *__restrict 
userdata,
   BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
   BVHOverlapData_Shared *data_shared = data->shared;
 
-  if (data_shared->callback) {
+  if (data->max_interactions) {
+tree_overlap_traverse_num(data,
+  
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
+  
data_shared->tree2->nodes[data_shared->tree2->totleaf]);
+  }
+  else if (data_shared->callback) {
 tree_overlap_traverse_cb(data,
  
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
  
data_shared->tree2->nodes[data_shared->tree2->totleaf]);
@@ -1266,18 +1271,6 @@ static void bvhtree_overlap_task_cb(void *__restrict 
userdata,
   }
 }
 
-static void bvhtree_overlap_num_task_cb(void *__restrict userdata,
-const int j,
-const TaskParallelTLS *__restrict 
UNUSED(tls))
-{
-  BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
-  BVHOverlapData_Shared *data_shared = data->shared;
-
-  tree_overlap_num_recursive(data,
- 
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
- 
data_shared->tree2->nodes[data_shared->tree2->totleaf]);
-}
-
 BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 const BVHTree *tree1,
 const BVHTree *tree2,
@@ -1345,16 +1338,11 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 TaskParallelSettings settings;
 BLI_parallel_range_settings_defaults();
 settings.min_iter_per_thread = 1;
-BLI_task_parallel_range(0,
-root_node_len,
-data,
-max_interactions ? bvhtree_overlap_num_task_cb :
-   bvhtree_overlap_task_cb,
-);
+BLI_task_parallel_range(0, root_node_len, data, bvhtree_overlap_task_cb, 
);
   }
   else {
 if (max_interactions) {
-  tree_overlap_num_recursive(data, root1, root2);
+  tree_overlap_traverse_num(data, root1, root2);
 }
 else if (callback) {
   tree_overlap_traverse_cb(data, root1, root2);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [8314e201398] master: BLI_bvhtree_overlap: Don't use BLI_task API when not needed

2020-01-04 Thread mano-wii
Commit: 8314e201398a22522e25eb3254d5b47f4f3f65f4
Author: mano-wii
Date:   Sat Jan 4 08:34:10 2020 -0300
Branches: master
https://developer.blender.org/rB8314e201398a22522e25eb3254d5b47f4f3f65f4

BLI_bvhtree_overlap: Don't use BLI_task API when not needed

No functional change.

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 7ac4a362cf4..d5bedaadb8b 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -113,7 +113,6 @@ BLI_STATIC_ASSERT((sizeof(void *) == 8 && sizeof(BVHTree) 
<= 48) ||
 typedef struct BVHOverlapData_Shared {
   const BVHTree *tree1, *tree2;
   axis_t start_axis, stop_axis;
-  bool use_threading;
 
   /* use for callbacks */
   BVHTree_OverlapCallback callback;
@@ -1252,11 +1251,8 @@ static void bvhtree_overlap_task_cb(void *__restrict 
userdata,
 const int j,
 const TaskParallelTLS *__restrict 
UNUSED(tls))
 {
-  BVHOverlapData_Thread *data = (BVHOverlapData_Thread *)userdata;
+  BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
   BVHOverlapData_Shared *data_shared = data->shared;
-  if (data_shared->use_threading) {
-data += j;
-  }
 
   if (data_shared->callback) {
 tree_overlap_traverse_cb(data,
@@ -1274,11 +1270,8 @@ static void bvhtree_overlap_num_task_cb(void *__restrict 
userdata,
 const int j,
 const TaskParallelTLS *__restrict 
UNUSED(tls))
 {
-  BVHOverlapData_Thread *data = (BVHOverlapData_Thread *)userdata;
+  BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
   BVHOverlapData_Shared *data_shared = data->shared;
-  if (data_shared->use_threading) {
-data += j;
-  }
 
   tree_overlap_num_recursive(data,
  
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
@@ -1333,7 +1326,6 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
   data_shared.tree2 = tree2;
   data_shared.start_axis = start_axis;
   data_shared.stop_axis = stop_axis;
-  data_shared.use_threading = use_threading;
 
   /* can be NULL */
   data_shared.callback = callback;
@@ -1349,14 +1341,27 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 data[j].thread = j;
   }
 
-  TaskParallelSettings settings;
-  BLI_parallel_range_settings_defaults();
-  settings.use_threading = use_threading;
-  BLI_task_parallel_range(0,
-  root_node_len,
-  data,
-  max_interactions ? bvhtree_overlap_num_task_cb : 
bvhtree_overlap_task_cb,
-  );
+  if (use_threading) {
+TaskParallelSettings settings;
+BLI_parallel_range_settings_defaults();
+BLI_task_parallel_range(0,
+root_node_len,
+data,
+max_interactions ? bvhtree_overlap_num_task_cb :
+   bvhtree_overlap_task_cb,
+);
+  }
+  else {
+if (max_interactions) {
+  tree_overlap_num_recursive(data, root1, root2);
+}
+else if (callback) {
+  tree_overlap_traverse_cb(data, root1, root2);
+}
+else {
+  tree_overlap_traverse(data, root1, root2);
+}
+  }
 
   if (overlap_pairs) {
 for (j = 0; j < thread_num; j++) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0ac41dea7e2] master: BLI_bvhtree_overlap does not work multithreaded

2020-01-04 Thread mano-wii
Commit: 0ac41dea7e21fb5c9388f8b72b8c6b6dfb005046
Author: mano-wii
Date:   Sat Jan 4 08:36:47 2020 -0300
Branches: master
https://developer.blender.org/rB0ac41dea7e21fb5c9388f8b72b8c6b6dfb005046

BLI_bvhtree_overlap does not work multithreaded

`BLI_task_parallel_range` counts the number of tasks depending on the
number of items.

In the case of `BLI_bvhtree_overlap` the number of items is always
between 2 and 16, which makes it always run in single thread.

So, set the maximum number of items per thread to 1.

In my tests the cloth collision system (which calls that function)
went from 0.80fps to 0.88fps.

Differential Revision: https://developer.blender.org/D6523

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index d5bedaadb8b..5a34626e335 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1344,6 +1344,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
   if (use_threading) {
 TaskParallelSettings settings;
 BLI_parallel_range_settings_defaults();
+settings.min_iter_per_thread = 1;
 BLI_task_parallel_range(0,
 root_node_len,
 data,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [aad09525fb5] master: BLI_bvhtree_overlap: Fix wrong count of child nodes

2020-01-03 Thread mano-wii
Commit: aad09525fb554ed023419d1c4fd12a5b8da72660
Author: mano-wii
Date:   Sat Jan 4 00:34:47 2020 -0300
Branches: master
https://developer.blender.org/rBaad09525fb554ed023419d1c4fd12a5b8da72660

BLI_bvhtree_overlap: Fix wrong count of child nodes

As you can see, here is testing the "children" of `node1`.
So bvhtree is `tree1`.

This problem has never been observed because usually `tree_type`
of `tree1` equals `tree_type` of `tree2`.

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 2674e6c61dc..7ac4a362cf4 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1129,7 +1129,7 @@ static void tree_overlap_traverse(BVHOverlapData_Thread 
*data_thread,
   }
 }
 else {
-  for (j = 0; j < data->tree2->tree_type; j++) {
+  for (j = 0; j < data->tree1->tree_type; j++) {
 if (node1->children[j]) {
   tree_overlap_traverse(data_thread, node1->children[j], node2);
 }
@@ -1176,7 +1176,7 @@ static void 
tree_overlap_traverse_cb(BVHOverlapData_Thread *data_thread,
   }
 }
 else {
-  for (j = 0; j < data->tree2->tree_type; j++) {
+  for (j = 0; j < data->tree1->tree_type; j++) {
 if (node1->children[j]) {
   tree_overlap_traverse_cb(data_thread, node1->children[j], node2);
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [025d13045ab] master: BLI_bvhtree_overlap: Make sure the number of nodes matches the number of threads

2020-01-03 Thread mano-wii
Commit: 025d13045abec142528f44576bfdcce9ef0da90a
Author: mano-wii
Date:   Fri Jan 3 23:06:07 2020 -0300
Branches: master
https://developer.blender.org/rB025d13045abec142528f44576bfdcce9ef0da90a

BLI_bvhtree_overlap: Make sure the number of nodes matches the number of threads

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 994fd510ac8..2674e6c61dc 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -1302,7 +1302,8 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
   /* `RETURN_PAIRS` was not implemented without `max_interations`. */
   BLI_assert(overlap_pairs || max_interactions);
 
-  const int thread_num = use_threading ? BLI_bvhtree_overlap_thread_num(tree1) 
: 1;
+  const int root_node_len = BLI_bvhtree_overlap_thread_num(tree1);
+  const int thread_num = use_threading ? root_node_len : 1;
   int j;
   size_t total = 0;
   BVHTreeOverlap *overlap = NULL, *to = NULL;
@@ -1352,7 +1353,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
   BLI_parallel_range_settings_defaults();
   settings.use_threading = use_threading;
   BLI_task_parallel_range(0,
-  root1->totnode,
+  root_node_len,
   data,
   max_interactions ? bvhtree_overlap_num_task_cb : 
bvhtree_overlap_task_cb,
   );

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [ad6c66fa3e1] master: Edit Mesh: Multithread support for Auto Merge & Split

2020-01-03 Thread mano-wii
Commit: ad6c66fa3e1c21eebf68291ec1b8c9c1b7c5cf0c
Author: mano-wii
Date:   Fri Jan 3 22:54:15 2020 -0300
Branches: master
https://developer.blender.org/rBad6c66fa3e1c21eebf68291ec1b8c9c1b7c5cf0c

Edit Mesh: Multithread support for Auto Merge & Split

Also collapsed edges are no longer used in the overlap test.
This greatly improves peformanse for cases where the distance tested is
relatively large.

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 27102694e88..721f820b103 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -33,6 +33,7 @@
 
 #include "bmesh_intersect_edges.h" /* own include */
 
+#define KDOP_TREE_TYPE 4
 #define KDOP_AXIS_LEN 14
 
 /*  */
@@ -239,7 +240,7 @@ struct EDBMSplitElem {
 
 struct EDBMSplitData {
   BMesh *bm;
-  BLI_Stack *pair_stack;
+  BLI_Stack **pair_stack;
   int cut_edges_len;
   float dist_sq;
   float dist_sq_sq;
@@ -318,17 +319,14 @@ static bool bm_edgexvert_isect_impl(BMVert *v,
 
 /* Vertex x Vertex Callback */
 
-static bool bm_vertxvert_isect_cb(void *userdata, int index_a, int index_b, 
int UNUSED(thread))
+static bool bm_vertxvert_isect_cb(void *userdata, int index_a, int index_b, 
int thread)
 {
   struct EDBMSplitData *data = userdata;
   BMVert *v_a = BM_vert_at_index(data->bm, index_a);
   BMVert *v_b = BM_vert_at_index(data->bm, index_b);
 
-  struct EDBMSplitElem *pair = BLI_stack_push_r(data->pair_stack);
+  struct EDBMSplitElem *pair = BLI_stack_push_r(data->pair_stack[thread]);
 
-  BLI_assert(v_a->head.index == -1);
-
-  /* Set index -2 for sure that it will not repeat keys in `targetmap`. */
   bm_vert_pair_elem_setup_ex(v_a, [0]);
   bm_vert_pair_elem_setup_ex(v_b, [1]);
 
@@ -345,7 +343,7 @@ static bool bm_vertxvert_self_isect_cb(void *userdata, int 
index_a, int index_b,
 
 /* Vertex x Edge and Edge x Vertex Callbacks */
 
-static bool bm_edgexvert_isect_cb(void *userdata, int index_a, int index_b, 
int UNUSED(thread))
+static bool bm_edgexvert_isect_cb(void *userdata, int index_a, int index_b, 
int thread)
 {
   struct EDBMSplitData *data = userdata;
   BMEdge *e = BM_edge_at_index(data->bm, index_a);
@@ -359,7 +357,7 @@ static bool bm_edgexvert_isect_cb(void *userdata, int 
index_a, int index_b, int
   struct EDBMSplitElem pair_tmp[2];
   if (bm_edgexvert_isect_impl(
   v, e, co, dir, lambda, data->dist_sq, >cut_edges_len, 
pair_tmp)) {
-struct EDBMSplitElem *pair = BLI_stack_push_r(data->pair_stack);
+struct EDBMSplitElem *pair = BLI_stack_push_r(data->pair_stack[thread]);
 pair[0] = pair_tmp[0];
 pair[1] = pair_tmp[1];
   }
@@ -370,7 +368,7 @@ static bool bm_edgexvert_isect_cb(void *userdata, int 
index_a, int index_b, int
 
 /* Edge x Edge Callbacks */
 
-static void bm_edgexedge_isect_impl(struct EDBMSplitData *data,
+static bool bm_edgexedge_isect_impl(struct EDBMSplitData *data,
 BMEdge *e_a,
 BMEdge *e_b,
 const float co_a[3],
@@ -378,7 +376,8 @@ static void bm_edgexedge_isect_impl(struct EDBMSplitData 
*data,
 const float co_b[3],
 const float dir_b[3],
 float lambda_a,
-float lambda_b)
+float lambda_b,
+struct EDBMSplitElem r_pair[2])
 {
   float dist_sq_va_factor, dist_sq_vb_factor;
   BMVert *e_a_v, *e_b_v;
@@ -403,7 +402,7 @@ static void bm_edgexedge_isect_impl(struct EDBMSplitData 
*data,
   if (e_a_v != e_b_v) {
 if (!IN_RANGE_INCL(lambda_a, 0.0f, 1.0f) || !IN_RANGE_INCL(lambda_b, 0.0f, 
1.0f)) {
   /* Vert x Edge is already handled elsewhere. */
-  return;
+  return false;
 }
 
 float dist_sq_va = SQUARE(dist_sq_va_factor) * len_squared_v3(dir_a);
@@ -411,7 +410,7 @@ static void bm_edgexedge_isect_impl(struct EDBMSplitData 
*data,
 
 if (dist_sq_va < data->dist_sq || dist_sq_vb < data->dist_sq) {
   /* Vert x Edge is already handled elsewhere. */
-  return;
+  return false;
 }
 
 float near_a[3], near_b[3];
@@ -420,19 +419,15 @@ static void bm_edgexedge_isect_impl(struct EDBMSplitData 
*data,
 
 float dist_sq = len_squared_v3v3(near_a, near_b);
 if (dist_sq < data->dist_sq) {
-  struct EDBMSplitElem pair_tmp[2];
-
-  bm_edge_pair_elem_setup(e_a, lambda_a, >cut_edges_len, 
_tmp[0]);
-  bm_edge_pair_elem_setup(e_b, lambda_b, >cut_edges_len, 
_tmp[1]);
-
-

[Bf-blender-cvs] [5659c8e0bf4] master: BLI_bvhtree_overlap: Improve non-multithreaded usage

2020-01-03 Thread mano-wii
Commit: 5659c8e0bf4393fe8e0eab5a4845aa09d35738ac
Author: mano-wii
Date:   Fri Jan 3 22:48:12 2020 -0300
Branches: master
https://developer.blender.org/rB5659c8e0bf4393fe8e0eab5a4845aa09d35738ac

BLI_bvhtree_overlap: Improve non-multithreaded usage

Although not using multithreading, the `thread` parameter in the
`BVHTree_OverlapCallback` callback always returned a value between the
"number of threads".

This parameter should always be 0 in such cases.

Also a `BLI_Stack` was created for each "thread" and used.
This small overhead is no longer seen.

Differential Revision: https://developer.blender.org/D6510

===

M   source/blender/blenlib/intern/BLI_kdopbvh.c

===

diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index 71f276bc68f..994fd510ac8 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -113,6 +113,7 @@ BLI_STATIC_ASSERT((sizeof(void *) == 8 && sizeof(BVHTree) 
<= 48) ||
 typedef struct BVHOverlapData_Shared {
   const BVHTree *tree1, *tree2;
   axis_t start_axis, stop_axis;
+  bool use_threading;
 
   /* use for callbacks */
   BVHTree_OverlapCallback callback;
@@ -1251,8 +1252,11 @@ static void bvhtree_overlap_task_cb(void *__restrict 
userdata,
 const int j,
 const TaskParallelTLS *__restrict 
UNUSED(tls))
 {
-  BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
+  BVHOverlapData_Thread *data = (BVHOverlapData_Thread *)userdata;
   BVHOverlapData_Shared *data_shared = data->shared;
+  if (data_shared->use_threading) {
+data += j;
+  }
 
   if (data_shared->callback) {
 tree_overlap_traverse_cb(data,
@@ -1270,8 +1274,11 @@ static void bvhtree_overlap_num_task_cb(void *__restrict 
userdata,
 const int j,
 const TaskParallelTLS *__restrict 
UNUSED(tls))
 {
-  BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
+  BVHOverlapData_Thread *data = (BVHOverlapData_Thread *)userdata;
   BVHOverlapData_Shared *data_shared = data->shared;
+  if (data_shared->use_threading) {
+data += j;
+  }
 
   tree_overlap_num_recursive(data,
  
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
@@ -1288,13 +1295,14 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 const uint max_interactions,
 const int flag)
 {
-  bool use_threading = (flag & BVH_OVERLAP_USE_THREADING) != 0;
   bool overlap_pairs = (flag & BVH_OVERLAP_RETURN_PAIRS) != 0;
+  bool use_threading = (flag & BVH_OVERLAP_USE_THREADING) != 0 &&
+   (tree1->totleaf > KDOPBVH_THREAD_LEAF_THRESHOLD);
 
   /* `RETURN_PAIRS` was not implemented without `max_interations`. */
   BLI_assert(overlap_pairs || max_interactions);
 
-  const int thread_num = BLI_bvhtree_overlap_thread_num(tree1);
+  const int thread_num = use_threading ? BLI_bvhtree_overlap_thread_num(tree1) 
: 1;
   int j;
   size_t total = 0;
   BVHTreeOverlap *overlap = NULL, *to = NULL;
@@ -1309,12 +1317,14 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 return NULL;
   }
 
+  const BVHNode *root1 = tree1->nodes[tree1->totleaf];
+  const BVHNode *root2 = tree2->nodes[tree2->totleaf];
+
   start_axis = min_axis(tree1->start_axis, tree2->start_axis);
   stop_axis = min_axis(tree1->stop_axis, tree2->stop_axis);
 
   /* fast check root nodes for collision before doing big splitting + 
traversal */
-  if (!tree_overlap_test(
-  tree1->nodes[tree1->totleaf], tree2->nodes[tree2->totleaf], 
start_axis, stop_axis)) {
+  if (!tree_overlap_test(root1, root2, start_axis, stop_axis)) {
 return NULL;
   }
 
@@ -1322,6 +1332,7 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
   data_shared.tree2 = tree2;
   data_shared.start_axis = start_axis;
   data_shared.stop_axis = stop_axis;
+  data_shared.use_threading = use_threading;
 
   /* can be NULL */
   data_shared.callback = callback;
@@ -1339,9 +1350,9 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 
   TaskParallelSettings settings;
   BLI_parallel_range_settings_defaults();
-  settings.use_threading = use_threading && (tree1->totleaf > 
KDOPBVH_THREAD_LEAF_THRESHOLD);
+  settings.use_threading = use_threading;
   BLI_task_parallel_range(0,
-  thread_num,
+  root1->totnode,
   data,
   max_interactions ? bvhtree_overlap_num_task_cb : 
bvhtree_overlap_task_cb,
   );

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [de530a95dc7] master: Transform: Pose: Partial support for Auto IK + X-Mirror

2020-01-02 Thread mano-wii
Commit: de530a95dc7b482dc22c933b9b8b2a98c79b5663
Author: mano-wii
Date:   Thu Jan 2 12:48:30 2020 -0300
Branches: master
https://developer.blender.org/rBde530a95dc7b482dc22c933b9b8b2a98c79b5663

Transform: Pose: Partial support for Auto IK + X-Mirror

Fix T69572

TODO: support `Relative-Mirror` as well.

Maniphest Tasks: T69572

Differential Revision: https://developer.blender.org/D5862

===

M   release/scripts/startup/bl_ui/space_view3d_toolbar.py
M   source/blender/editors/transform/transform_convert.c
M   source/blender/editors/transform/transform_convert_armature.c
M   source/blender/editors/transform/transform_generics.c
M   source/blender/editors/transform/transform_orientations.c
M   source/blender/makesrna/intern/rna_pose.c

===

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py 
b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index f0c4aaa9344..011c2a8b39a 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -313,7 +313,7 @@ class VIEW3D_PT_tools_posemode_options(View3DPanel, Panel):
 layout.prop(pose, "use_auto_ik")
 layout.prop(pose, "use_mirror_x")
 col = layout.column()
-col.active = pose.use_mirror_x
+col.active = pose.use_mirror_x and not pose.use_auto_ik
 col.prop(pose, "use_mirror_relative")
 
 layout.label(text="Affect Only")
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index 2001d42a5eb..a214eb1c80b 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -450,20 +450,15 @@ int count_set_pose_transflags(Object *ob,
 
   for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
 bone = pchan->bone;
+bone->flag &= ~(BONE_TRANSFORM | BONE_TRANSFORM_MIRROR);
 if (PBONE_VISIBLE(arm, bone)) {
   if ((bone->flag & BONE_SELECTED)) {
 bone->flag |= BONE_TRANSFORM;
   }
-  else {
-bone->flag &= ~BONE_TRANSFORM;
-  }
 
   bone->flag &= ~BONE_HINGE_CHILD_TRANSFORM;
   bone->flag &= ~BONE_TRANSFORM_CHILD;
 }
-else {
-  bone->flag &= ~BONE_TRANSFORM;
-}
   }
 
   /* make sure no bone can be transformed when a parent is transformed */
diff --git a/source/blender/editors/transform/transform_convert_armature.c 
b/source/blender/editors/transform/transform_convert_armature.c
index cc023688c8e..0edf55ece7e 100644
--- a/source/blender/editors/transform/transform_convert_armature.c
+++ b/source/blender/editors/transform/transform_convert_armature.c
@@ -86,6 +86,7 @@ static void add_pose_transdata(
 td->flag |= TD_NO_LOC;
   }
 
+  td->extra = pchan;
   td->protectflag = pchan->protectflag;
 
   td->loc = pchan->loc;
@@ -364,7 +365,7 @@ static short pose_grab_with_ik(Main *bmain, Object *ob)
* (but they must be selected, and only one ik-solver per chain should get 
added) */
   for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
 if (pchan->bone->layer & arm->layer) {
-  if (pchan->bone->flag & BONE_SELECTED) {
+  if (pchan->bone->flag & (BONE_SELECTED | BONE_TRANSFORM_MIRROR)) {
 /* Rule: no IK for solitatry (unconnected) bones */
 for (bonec = pchan->bone->childbase.first; bonec; bonec = bonec->next) 
{
   if (bonec->flag & BONE_CONNECTED) {
@@ -379,7 +380,7 @@ static short pose_grab_with_ik(Main *bmain, Object *ob)
 if (pchan->parent) {
   /* only adds if there's no IK yet (and no parent bone was selected) 
*/
   for (parent = pchan->parent; parent; parent = parent->parent) {
-if (parent->bone->flag & BONE_SELECTED) {
+if (parent->bone->flag & (BONE_SELECTED | BONE_TRANSFORM_MIRROR)) {
   break;
 }
   }
@@ -513,14 +514,6 @@ void createTransPose(TransInfo *t)
   }
 }
 
-/* do we need to add temporal IK chains? */
-if ((pose->flag & POSE_AUTO_IK) && t->mode == TFM_TRANSLATION) {
-  if (pose_grab_with_ik(bmain, ob)) {
-t->flag |= T_AUTOIK;
-has_translate_rotate[0] = true;
-  }
-}
-
 if (mirror) {
   int total_mirrored = 0;
   for (bPoseChannel *pchan = ob->pose->chanbase.first; pchan; pchan = 
pchan->next) {
@@ -541,16 +534,6 @@ void createTransPose(TransInfo *t)
 }
   }
 
-  /* if there are no translatable bones, do rotation */
-  if ((t->mode == TFM_TRANSLATION) && !has_translate_rotate[0]) {
-if (has_translate_rotate[1]) {
-  t-&

[Bf-blender-cvs] [d27fb467151] master: EditMesh: Improve AutoMerge with Split Edges & Faces

2020-01-01 Thread mano-wii
Commit: d27fb4671512a3834b61c5c350f428ddccc4669e
Author: mano-wii
Date:   Wed Jan 1 21:06:59 2020 -0300
Branches: master
https://developer.blender.org/rBd27fb4671512a3834b61c5c350f428ddccc4669e

EditMesh: Improve AutoMerge with Split Edges & Faces

Previously, compared to `Auto Merge` without `Split Edges & Faces`,
`Auto Merge` with this option ignored duplicates between selected
vertices. It only considered duplicates between selected vertices and
unselected vertices.

This is a regress and not a progress.

This commit implements this behavior, so this option matches the other
`Auto Merge`.

===

M   source/blender/bmesh/tools/bmesh_intersect_edges.c
M   source/blender/editors/include/ED_mesh.h
M   source/blender/editors/mesh/editmesh_automerge.c

===

diff --git a/source/blender/bmesh/tools/bmesh_intersect_edges.c 
b/source/blender/bmesh/tools/bmesh_intersect_edges.c
index 82e2151dc01..27102694e88 100644
--- a/source/blender/bmesh/tools/bmesh_intersect_edges.c
+++ b/source/blender/bmesh/tools/bmesh_intersect_edges.c
@@ -240,20 +240,15 @@ struct EDBMSplitElem {
 struct EDBMSplitData {
   BMesh *bm;
   BLI_Stack *pair_stack;
-  int cut_edges_a_len;
-  int cut_edges_b_len;
+  int cut_edges_len;
   float dist_sq;
   float dist_sq_sq;
 };
 
 /* Utils */
 
-static void bm_vert_pair_elem_setup_ex(BMVert *v,
-   float edge_index,
-   struct EDBMSplitElem *r_pair_elem)
+static void bm_vert_pair_elem_setup_ex(BMVert *v, struct EDBMSplitElem 
*r_pair_elem)
 {
-  BLI_assert(v->head.index == -1);
-  v->head.index = edge_index;
   r_pair_elem->vert = v;
 }
 
@@ -274,21 +269,23 @@ static void bm_edge_pair_elem_setup(BMEdge *e,
 }
 
 /* Util for Vert x Edge and Edge x Edge callbacks */
-static bool bm_vertxedge_isect_impl_ex(BMVert *v,
-   BMEdge *e,
-   int edge_index,
-   const float co[3],
-   const float dir[3],
-   float lambda,
-   float data_dist_sq,
-   int *data_cut_edges_len,
-   struct EDBMSplitElem r_pair[2])
+static bool bm_edgexvert_isect_impl(BMVert *v,
+BMEdge *e,
+const float co[3],
+const float dir[3],
+float lambda,
+float data_dist_sq,
+int *data_cut_edges_len,
+struct EDBMSplitElem r_pair[2])
 {
-  BLI_assert(v->head.index == -1);
-
   BMVert *e_v;
   float dist_sq_vert_factor;
 
+  if (!IN_RANGE_INCL(lambda, 0.0f, 1.0f)) {
+/* Vert x Vert is already handled elsewhere. */
+return false;
+  }
+
   if (lambda < 0.5f) {
 e_v = e->v1;
 dist_sq_vert_factor = lambda;
@@ -299,27 +296,19 @@ static bool bm_vertxedge_isect_impl_ex(BMVert *v,
   }
 
   if (v != e_v) {
-CLAMP(lambda, 0.0f, 1.0f);
+float dist_sq_vert = SQUARE(dist_sq_vert_factor) * len_squared_v3(dir);
+if (dist_sq_vert < data_dist_sq) {
+  /* Vert x Vert is already handled elsewhere. */
+  return false;
+}
 
 float near[3];
 madd_v3_v3v3fl(near, co, dir, lambda);
 
 float dist_sq = len_squared_v3v3(v->co, near);
 if (dist_sq < data_dist_sq) {
-  float dist_sq_vert = SQUARE(dist_sq_vert_factor) * len_squared_v3(dir);
-  if (dist_sq_vert < data_dist_sq) {
-if (e_v->head.index != -1) {
-  /* Vertex already has an intersection. */
-  return false;
-}
-
-bm_vert_pair_elem_setup_ex(e_v, -2, _pair[1]);
-  }
-  else {
-bm_edge_pair_elem_setup(e, lambda, data_cut_edges_len, _pair[1]);
-  }
-
-  bm_vert_pair_elem_setup_ex(v, edge_index, _pair[0]);
+  bm_edge_pair_elem_setup(e, lambda, data_cut_edges_len, _pair[0]);
+  bm_vert_pair_elem_setup_ex(v, _pair[1]);
   return true;
 }
   }
@@ -340,75 +329,48 @@ static bool bm_vertxvert_isect_cb(void *userdata, int 
index_a, int index_b, int
   BLI_assert(v_a->head.index == -1);
 
   /* Set index -2 for sure that it will not repeat keys in `targetmap`. */
-  bm_vert_pair_elem_setup_ex(v_a, -2, [0]);
-  bm_vert_pair_elem_setup_ex(v_b, -1, [1]);
+  bm_vert_pair_elem_setup_ex(v_a, [0]);
+  bm_vert_pair_elem_setup_ex(v_b, [1]);
 
   return true;
 }
 
+static bool bm_vertxvert_self_isect_cb(void *userdata, int index_a, int 
index_b, int thread)
+{
+  if (index_a < index_b) {
+return bm_vertxvert_isect_cb(userdata, index_a, index_b, thread);
+  }
+  return false;
+}
+
 /* Vertex x Ed

[Bf-blender-cvs] [86a2ffc3ab3] master: Transform: Individual Origins: Create islands between only selected uvs.

2020-01-01 Thread mano-wii
Commit: 86a2ffc3ab321f00317aa05fb423c4df6f68aced
Author: mano-wii
Date:   Tue Dec 31 12:56:27 2019 -0300
Branches: master
https://developer.blender.org/rB86a2ffc3ab321f00317aa05fb423c4df6f68aced

Transform: Individual Origins: Create islands between only selected uvs.

Currently the islands are created depending only on the visible UVs.
This can be confusing because compared to Edit Meshes, islands are created 
based on the selected elements.

T68284 shows a case where this confusion is observed.

Differential Revision: https://developer.blender.org/D6502

===

M   source/blender/editors/include/ED_mesh.h
M   source/blender/editors/mesh/editmesh_utils.c
M   source/blender/editors/sculpt_paint/sculpt_uv.c
M   source/blender/editors/transform/transform_convert_mesh.c
M   source/blender/editors/uvedit/uvedit_smart_stitch.c

===

diff --git a/source/blender/editors/include/ED_mesh.h 
b/source/blender/editors/include/ED_mesh.h
index 4bf43a2034a..90ad90058e7 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -109,7 +109,9 @@ void EDBM_update_generic(struct BMEditMesh *em,
  const bool is_destructive);
 
 struct UvElementMap *BM_uv_element_map_create(struct BMesh *bm,
-  const bool selected,
+  struct Scene *scene,
+  const bool face_selected,
+  const bool uv_selected,
   const bool use_winding,
   const bool do_islands);
 void BM_uv_element_map_free(struct UvElementMap *vmap);
diff --git a/source/blender/editors/mesh/editmesh_utils.c 
b/source/blender/editors/mesh/editmesh_utils.c
index 42404554ed8..67f8db71e54 100644
--- a/source/blender/editors/mesh/editmesh_utils.c
+++ b/source/blender/editors/mesh/editmesh_utils.c
@@ -51,6 +51,7 @@
 
 #include "ED_mesh.h"
 #include "ED_screen.h"
+#include "ED_uvedit.h"
 #include "ED_view3d.h"
 
 #include "mesh_intern.h" /* own include */
@@ -662,7 +663,9 @@ UvMapVert *BM_uv_vert_map_at_index(UvVertMap *vmap, 
unsigned int v)
 
 /* A specialized vert map used by stitch operator */
 UvElementMap *BM_uv_element_map_create(BMesh *bm,
-   const bool selected,
+   const Scene *scene,
+   const bool face_selected,
+   const bool uv_selected,
const bool use_winding,
const bool do_islands)
 {
@@ -689,8 +692,17 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm,
 
   /* generate UvElement array */
   BM_ITER_MESH (efa, , bm, BM_FACES_OF_MESH) {
-if (!selected || BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
-  totuv += efa->len;
+if (!face_selected || BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
+  if (!uv_selected) {
+totuv += efa->len;
+  }
+  else {
+BM_ITER_ELEM (l, , efa, BM_LOOPS_OF_FACE) {
+  if (uvedit_uv_select_test(scene, l, cd_loop_uv_offset)) {
+totuv++;
+  }
+}
+  }
 }
   }
 
@@ -715,7 +727,7 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm,
   winding[j] = false;
 }
 
-if (!selected || BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
+if (!face_selected || BM_elem_flag_test(efa, BM_ELEM_SELECT)) {
   float(*tf_uv)[2] = NULL;
 
   if (use_winding) {
@@ -723,6 +735,10 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm,
   }
 
   BM_ITER_ELEM_INDEX (l, , efa, BM_LOOPS_OF_FACE, i) {
+if (uv_selected && !uvedit_uv_select_test(scene, l, 
cd_loop_uv_offset)) {
+  continue;
+}
+
 buf->l = l;
 buf->separate = 0;
 buf->island = INVALID_ISLAND;
@@ -832,6 +848,10 @@ UvElementMap *BM_uv_element_map_create(BMesh *bm,
   efa = stack[--stacksize];
 
   BM_ITER_ELEM (l, , efa, BM_LOOPS_OF_FACE) {
+if (uv_selected && !uvedit_uv_select_test(scene, l, 
cd_loop_uv_offset)) {
+  continue;
+}
+
 UvElement *element, *initelement = 
element_map->vert[BM_elem_index_get(l->v)];
 
 for (element = initelement; element; element = element->next) {
diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c 
b/source/blender/editors/sculpt_paint/sculpt_uv.c
index 8fbaf3396bd..72b02436b92 100644
--- a/source/blender/editors/sculpt_paint/sculpt_uv.c
+++ b/source/blender/editors/sculpt_paint/sculpt_uv.c
@@ -521,18 +521,18 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, 

[Bf-blender-cvs] [62d131e962d] master: Fix T72792: Crash with Vertex Groups + Weld Modifier after generative modifiers

2019-12-30 Thread mano-wii
Commit: 62d131e962d6e0a4f39db98d4f89243c16c55779
Author: mano-wii
Date:   Mon Dec 30 11:25:09 2019 -0300
Branches: master
https://developer.blender.org/rB62d131e962d6e0a4f39db98d4f89243c16c55779

Fix T72792: Crash with Vertex Groups + Weld Modifier after generative modifiers

Some generative modifiers remove the `CD_MDEFORMVERT` custom layer.
So make sure it exists in the mesh.

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index b393cedbd37..9c8579e1cd3 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -1629,13 +1629,15 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
   if (defgrp_index != -1) {
 MDeformVert *dvert, *dv;
 dvert = CustomData_get_layer(>vdata, CD_MDEFORMVERT);
-dv = [0];
-v_mask = BLI_BITMAP_NEW(totvert, __func__);
-for (i = 0; i < totvert; i++, dv++) {
-  const bool found = defvert_find_weight(dv, defgrp_index) > 0.0f;
-  if (found) {
-BLI_BITMAP_ENABLE(v_mask, i);
-v_mask_act++;
+if (dvert) {
+  dv = [0];
+  v_mask = BLI_BITMAP_NEW(totvert, __func__);
+  for (i = 0; i < totvert; i++, dv++) {
+const bool found = defvert_find_weight(dv, defgrp_index) > 0.0f;
+if (found) {
+  BLI_BITMAP_ENABLE(v_mask, i);
+  v_mask_act++;
+}
   }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3b891989ac4] master: Fix T68131: Cycles bake panel code typo

2019-12-30 Thread mano-wii
Commit: 3b891989ac41003be2ef5b3b7534f488d14d65ed
Author: mano-wii
Date:   Mon Dec 30 11:07:17 2019 -0300
Branches: master
https://developer.blender.org/rB3b891989ac41003be2ef5b3b7534f488d14d65ed

Fix T68131: Cycles bake panel code typo

```
NameError: name 'col' is not defined
```

===

M   intern/cycles/blender/addon/ui.py

===

diff --git a/intern/cycles/blender/addon/ui.py 
b/intern/cycles/blender/addon/ui.py
index 011c83d44b8..c4182ba564a 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -1949,7 +1949,7 @@ class CYCLES_RENDER_PT_bake_output(CyclesButtonsPanel, 
Panel):
 layout.prop(rd, "use_bake_clear", text="Clear Image")
 
 if rd.bake_type == 'DISPLACEMENT':
-col.prop(rd, "use_bake_lores_mesh")
+layout.prop(rd, "use_bake_lores_mesh")
 else:
 
 layout.prop(cbk, "margin")

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [d2dc4f84115] master: Transform: Use parent bone orientation if the bone has not size

2019-12-27 Thread mano-wii
Commit: d2dc4f84115c52af15e643a1f82c042025ff1344
Author: mano-wii
Date:   Fri Dec 27 09:51:37 2019 -0300
Branches: master
https://developer.blender.org/rBd2dc4f84115c52af15e643a1f82c042025ff1344

Transform: Use parent bone orientation if the bone has not size

As shown in the T68805, non-sized bones (such as the resulting extruded
bone) have no direction or orientation.

This can be bad for operators like `extrude_move` since the user might
want the resulting bone to be aligned with the bone that originated it.

The solution here is to get the parent bone orientation in the
transform operator if the bone has no size.

Differential Revision: https://developer.blender.org/D6486

===

M   source/blender/editors/armature/armature_utils.c

===

diff --git a/source/blender/editors/armature/armature_utils.c 
b/source/blender/editors/armature/armature_utils.c
index 2b18fc15f63..451148ed936 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -232,11 +232,22 @@ EditBone *ED_armature_ebone_find_shared_parent(EditBone 
*ebone_child[],
 
 void ED_armature_ebone_to_mat3(EditBone *ebone, float mat[3][3])
 {
-  float delta[3];
+  float delta[3], roll;
 
   /* Find the current bone matrix */
   sub_v3_v3v3(delta, ebone->tail, ebone->head);
-  vec_roll_to_mat3(delta, ebone->roll, mat);
+  roll = ebone->roll;
+  if (!normalize_v3(delta)) {
+/* Use the orientation of the parent bone if any. */
+const EditBone *ebone_parent = ebone->parent;
+if (ebone_parent) {
+  sub_v3_v3v3(delta, ebone_parent->tail, ebone_parent->head);
+  normalize_v3(delta);
+  roll = ebone_parent->roll;
+}
+  }
+
+  vec_roll_to_mat3_normalized(delta, roll, mat);
 }
 
 void ED_armature_ebone_to_mat4(EditBone *ebone, float mat[4][4])

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [26e4f4a8c47] master: Fix T71795: Unproject with high clipping range sometimes results in nans

2019-12-19 Thread mano-wii
Commit: 26e4f4a8c475049e9600d466bb95eed341202f57
Author: mano-wii
Date:   Thu Dec 19 11:44:50 2019 -0300
Branches: master
https://developer.blender.org/rB26e4f4a8c475049e9600d466bb95eed341202f57

Fix T71795: Unproject with high clipping range sometimes results in nans

Differential Revision: https://developer.blender.org/D6311

===

M   source/blender/gpu/intern/gpu_matrix.c

===

diff --git a/source/blender/gpu/intern/gpu_matrix.c 
b/source/blender/gpu/intern/gpu_matrix.c
index fb0dffb58d1..5e44a950ba7 100644
--- a/source/blender/gpu/intern/gpu_matrix.c
+++ b/source/blender/gpu/intern/gpu_matrix.c
@@ -535,6 +535,11 @@ bool GPU_matrix_unproject_precalc(struct 
GPUMatrixUnproject_Precalc *precalc,
  >dims.ymax,
  >dims.zmin,
  >dims.zmax);
+  if (isinf(precalc->dims.zmax)) {
+/* We cannot retrieve the actual value of the clip_end.
+ * Use `FLT_MAX` to avoid nans. */
+precalc->dims.zmax = FLT_MAX;
+  }
   for (int i = 0; i < 4; i++) {
 precalc->view[i] = (float)view[i];
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [61f4a7d1f59] master: Fix T72372: color picker is unreliable with large "clip end" values

2019-12-18 Thread mano-wii
Commit: 61f4a7d1f593e3870e7a0df4b32e95516b236eef
Author: mano-wii
Date:   Wed Dec 18 09:41:03 2019 -0300
Branches: master
https://developer.blender.org/rB61f4a7d1f593e3870e7a0df4b32e95516b236eef

Fix T72372: color picker is unreliable with large "clip end" values

By my tests, `planes_from_projmat` proved to be more accurate than the current 
solution.

Differential Revision: https://developer.blender.org/D6434

===

M   source/blender/draw/intern/draw_manager_data.c

===

diff --git a/source/blender/draw/intern/draw_manager_data.c 
b/source/blender/draw/intern/draw_manager_data.c
index 83b764317a9..98474c81209 100644
--- a/source/blender/draw/intern/draw_manager_data.c
+++ b/source/blender/draw/intern/draw_manager_data.c
@@ -1416,53 +1416,19 @@ static void draw_frustum_boundbox_calc(const float 
(*viewinv)[4],
   }
 }
 
-static void draw_frustum_culling_planes_calc(const BoundBox *bbox, float 
(*frustum_planes)[4])
+static void draw_frustum_culling_planes_calc(const float (*persmat)[4], float 
(*frustum_planes)[4])
 {
-  /* TODO See if planes_from_projmat cannot do the job. */
+  planes_from_projmat(persmat,
+  frustum_planes[0],
+  frustum_planes[5],
+  frustum_planes[3],
+  frustum_planes[1],
+  frustum_planes[4],
+  frustum_planes[2]);
 
-  /* Compute clip planes using the world space frustum corners. */
+  /* Normalize. */
   for (int p = 0; p < 6; p++) {
-int q, r, s;
-switch (p) {
-  case 0:
-q = 1;
-r = 2;
-s = 3;
-break; /* -X */
-  case 1:
-q = 0;
-r = 4;
-s = 5;
-break; /* -Y */
-  case 2:
-q = 1;
-r = 5;
-s = 6;
-break; /* +Z (far) */
-  case 3:
-q = 2;
-r = 6;
-s = 7;
-break; /* +Y */
-  case 4:
-q = 0;
-r = 3;
-s = 7;
-break; /* -Z (near) */
-  default:
-q = 4;
-r = 7;
-s = 6;
-break; /* +X */
-}
-
-normal_quad_v3(frustum_planes[p], bbox->vec[p], bbox->vec[q], 
bbox->vec[r], bbox->vec[s]);
-/* Increase precision and use the mean of all 4 corners. */
-frustum_planes[p][3] = -dot_v3v3(frustum_planes[p], bbox->vec[p]);
-frustum_planes[p][3] += -dot_v3v3(frustum_planes[p], bbox->vec[q]);
-frustum_planes[p][3] += -dot_v3v3(frustum_planes[p], bbox->vec[r]);
-frustum_planes[p][3] += -dot_v3v3(frustum_planes[p], bbox->vec[s]);
-frustum_planes[p][3] *= 0.25f;
+frustum_planes[p][3] /= normalize_v3(frustum_planes[p]);
   }
 }
 
@@ -1720,7 +1686,7 @@ void DRW_view_update(DRWView *view,
   }
 
   draw_frustum_boundbox_calc(viewinv, winmat, >frustum_corners);
-  draw_frustum_culling_planes_calc(>frustum_corners, 
view->frustum_planes);
+  draw_frustum_culling_planes_calc(view->storage.persmat, 
view->frustum_planes);
   draw_frustum_bound_sphere_calc(
   >frustum_corners, viewinv, winmat, wininv, >frustum_bsphere);

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [64116ca15a4] master: Fix unreported: Crash when confirms GRAPH_OT_decimate

2019-12-17 Thread mano-wii
Commit: 64116ca15a474943ff903f4751cb529054e87681
Author: mano-wii
Date:   Tue Dec 17 12:42:37 2019 -0300
Branches: master
https://developer.blender.org/rB64116ca15a474943ff903f4751cb529054e87681

Fix unreported: Crash when confirms GRAPH_OT_decimate

`dgo` is MEM_freed just before.

===

M   source/blender/editors/space_graph/graph_edit.c

===

diff --git a/source/blender/editors/space_graph/graph_edit.c 
b/source/blender/editors/space_graph/graph_edit.c
index 4d2772aabee..03df93e4c8a 100644
--- a/source/blender/editors/space_graph/graph_edit.c
+++ b/source/blender/editors/space_graph/graph_edit.c
@@ -1409,6 +1409,8 @@ static void decimate_exit(bContext *C, wmOperator *op)
   if (dgo == NULL) {
 return;
   }
+
+  ScrArea *sa = dgo->sa;
   LinkData *link;
 
   for (link = dgo->bezt_arr_list.first; link != NULL; link = link->next) {
@@ -1422,7 +1424,7 @@ static void decimate_exit(bContext *C, wmOperator *op)
 
   /* Return to normal cursor and header status. */
   WM_cursor_modal_restore(win);
-  ED_area_status_text(dgo->sa, NULL);
+  ED_area_status_text(sa, NULL);
 
   /* cleanup */
   op->customdata = NULL;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [84c1e57dfee] master: Fix T72507: Depth of bones missing for navigation

2019-12-17 Thread mano-wii
Commit: 84c1e57dfeed1f6a84bd210d949b4285c3132064
Author: mano-wii
Date:   Tue Dec 17 10:34:49 2019 -0300
Branches: master
https://developer.blender.org/rB84c1e57dfeed1f6a84bd210d949b4285c3132064

Fix T72507: Depth of bones missing for navigation

Regression introduced in rBb11272a0

===

M   source/blender/draw/intern/draw_manager.c

===

diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 5832db31c4e..b747222e387 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2468,6 +2468,9 @@ void DRW_draw_depth_loop(struct Depsgraph *depsgraph,
 
   /* Get list of enabled engines */
   {
+/* Required by `DRW_state_draw_support()` */
+DST.draw_ctx.v3d = v3d;
+
 drw_engines_enable_basic();
 if (DRW_state_draw_support()) {
   drw_engines_enable_overlays();

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [9b871683b1d] master: Fix T72412: Weld Modifier: Merged edges not displayed in wireframe

2019-12-13 Thread mano-wii
Commit: 9b871683b1d1bfbcb2e9f2bc57a3065206240191
Author: mano-wii
Date:   Fri Dec 13 21:47:42 2019 -0300
Branches: master
https://developer.blender.org/rB9b871683b1d1bfbcb2e9f2bc57a3065206240191

Fix T72412: Weld Modifier: Merged edges not displayed in wireframe

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index 7c2754a5fce..b393cedbd37 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -1477,7 +1477,7 @@ static void customdata_weld(
 #endif
   uint crease = 0;
   uint bweight = 0;
-  char flag = 0;
+  short flag = 0;
 
   /* interpolates a layer at a time */
   dest_i = 0;
@@ -1569,7 +1569,7 @@ static void customdata_weld(
   mv_no[2] = (short)no[2];
 #endif
 
-  mv->flag = flag;
+  mv->flag = (char)flag;
   mv->bweight = (char)bweight;
 }
 else if (type == CD_MEDGE) {
@@ -1581,6 +1581,7 @@ static void customdata_weld(
 
   me->crease = (char)crease;
   me->bweight = (char)bweight;
+  me->flag = flag;
 }
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0f04bf8cd68] master: Cleanup: Follow the commenting convention

2019-12-12 Thread mano-wii
Commit: 0f04bf8cd68675efc47212f2b1fe490392baf083
Author: mano-wii
Date:   Thu Dec 12 12:03:27 2019 -0300
Branches: master
https://developer.blender.org/rB0f04bf8cd68675efc47212f2b1fe490392baf083

Cleanup: Follow the commenting convention

Capital letter and full stop.

===

M   source/blender/makesdna/DNA_modifier_types.h

===

diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index 0ed9a7f3e5e..0b61e312846 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1814,10 +1814,10 @@ enum {
 typedef struct WeldModifierData {
   ModifierData modifier;
 
-  /* the limit below which to merge vertices in adjacent duplicates */
+  /* The limit below which to merge vertices. */
   float merge_dist;
   unsigned int max_interactions;
-  /** Name of vertex group to use to mask, MAX_VGROUP_NAME. */
+  /* Name of vertex group to use to mask, MAX_VGROUP_NAME. */
   char defgrp_name[64];
 } WeldModifierData;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [302d692b0b3] master: Cleanup: Rename variables (_tot -> _len)

2019-12-12 Thread mano-wii
Commit: 302d692b0b398a6224871ccbc49efdf1580726a5
Author: mano-wii
Date:   Thu Dec 12 12:01:37 2019 -0300
Branches: master
https://developer.blender.org/rB302d692b0b398a6224871ccbc49efdf1580726a5

Cleanup: Rename variables (_tot -> _len)

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index ae081942a39..7c2754a5fce 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -146,10 +146,10 @@ typedef struct WeldMesh {
   uint *loop_map;
   uint *poly_map;
 
-  uint vert_kill_tot;
-  uint edge_kill_tot;
-  uint loop_kill_tot;
-  uint poly_kill_tot; /* Including the new polygons. */
+  uint vert_kill_len;
+  uint edge_kill_len;
+  uint loop_kill_len;
+  uint poly_kill_len; /* Including the new polygons. */
 
   /* Size of the affected polygon with more sides. */
   uint max_poly_len;
@@ -189,11 +189,11 @@ static bool 
weld_iter_loop_of_poly_begin(WeldLoopOfPolyIter *iter,
 static bool weld_iter_loop_of_poly_next(WeldLoopOfPolyIter *iter);
 
 static void weld_assert_vert_dest_map_setup(const BVHTreeOverlap *overlap,
-const uint overlap_tot,
+const uint overlap_len,
 const uint *vert_dest_map)
 {
   const BVHTreeOverlap *overlap_iter = [0];
-  for (uint i = overlap_tot; i--; overlap_iter++) {
+  for (uint i = overlap_len; i--; overlap_iter++) {
 uint indexA = overlap_iter->indexA;
 uint indexB = overlap_iter->indexB;
 uint va_dst = vert_dest_map[indexA];
@@ -205,7 +205,7 @@ static void weld_assert_vert_dest_map_setup(const 
BVHTreeOverlap *overlap,
 
 static void weld_assert_edge_kill_len(const WeldEdge *wedge,
   const uint wedge_len,
-  const uint supposed_kill_tot)
+  const uint supposed_kill_len)
 {
   uint kills = 0;
   const WeldEdge *we = [0];
@@ -216,7 +216,7 @@ static void weld_assert_edge_kill_len(const WeldEdge *wedge,
   kills++;
 }
   }
-  BLI_assert(kills == supposed_kill_tot);
+  BLI_assert(kills == supposed_kill_len);
 }
 
 static void weld_assert_poly_and_loop_kill_len(const WeldPoly *wpoly,
@@ -229,8 +229,8 @@ static void weld_assert_poly_and_loop_kill_len(const 
WeldPoly *wpoly,
const MPoly *mpoly,
const uint mpoly_len,
const uint mloop_len,
-   const uint 
supposed_poly_kill_tot,
-   const uint 
supposed_loop_kill_tot)
+   const uint 
supposed_poly_kill_len,
+   const uint 
supposed_loop_kill_len)
 {
   uint poly_kills = 0;
   uint loop_kills = mloop_len;
@@ -306,8 +306,8 @@ static void weld_assert_poly_and_loop_kill_len(const 
WeldPoly *wpoly,
 }
   }
 
-  BLI_assert(poly_kills == supposed_poly_kill_tot);
-  BLI_assert(loop_kills == supposed_loop_kill_tot);
+  BLI_assert(poly_kills == supposed_poly_kill_len);
+  BLI_assert(loop_kills == supposed_loop_kill_len);
 }
 
 static void weld_assert_poly_no_vert_repetition(const WeldPoly *wp,
@@ -368,22 +368,22 @@ static void weld_assert_poly_len(const WeldPoly *wp, 
const WeldLoop *wloop)
 /** \name Weld Vert API
  * \{ */
 
-static void weld_vert_ctx_alloc_and_setup(const uint vert_tot,
+static void weld_vert_ctx_alloc_and_setup(const uint mvert_len,
   const BVHTreeOverlap *overlap,
-  const uint overlap_tot,
+  const uint overlap_len,
   uint *r_vert_dest_map,
   WeldVert **r_wvert,
-  uint *r_wvert_tot,
-  uint *r_vert_kill_tot)
+  uint *r_wvert_len,
+  uint *r_vert_kill_len)
 {
   uint *v_dest_iter = _vert_dest_map[0];
-  for (uint i = vert_tot; i--; v_dest_iter++) {
+  for (uint i = mvert_len; i--; v_dest_iter++) {
 *v_dest_iter = OUT_OF_CONTEXT;
   }
 
-  uint vert_kill_tot = 0;
+  uint vert_kill_len = 0;
   const BVHTreeOverlap *overlap_iter = [0];
-  for (uint i = 0; i < overlap_tot; i++, overlap_iter++) {
+  for (uint i = 0; i < overlap_len; i++, overlap_iter++) {
 uint indexA = overlap_iter->indexA;
 uint indexB = overlap_iter->indexB;
 
@@ -397,11 +397,11 @@ static void weld_vert_ctx_alloc

[Bf-blender-cvs] [c8d121bf352] master: Cleanup: Typo

2019-12-12 Thread mano-wii
Commit: c8d121bf352b7a688015918d819a6f01f276e4f6
Author: mano-wii
Date:   Thu Dec 12 12:04:57 2019 -0300
Branches: master
https://developer.blender.org/rBc8d121bf352b7a688015918d819a6f01f276e4f6

Cleanup: Typo

===

M   source/blender/makesrna/intern/rna_modifier.c

===

diff --git a/source/blender/makesrna/intern/rna_modifier.c 
b/source/blender/makesrna/intern/rna_modifier.c
index 3bb8be38682..3759b721152 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -191,7 +191,7 @@ const EnumPropertyItem 
rna_enum_object_modifier_type_items[] = {
  "WELD",
  ICON_AUTOMERGE_OFF,
  "Weld",
- "Finds groups of vertices closer then dist and merges them together"},
+ "Find groups of vertices closer then dist and merges them together"},
 {0, "", 0, N_("Deform"), ""},
 {eModifierType_Armature,
  "ARMATURE",

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [85b7d397f76] master: Fix T72380: New Weld Modifier is crashing when used after a Vertex Weight Modifier

2019-12-12 Thread mano-wii
Commit: 85b7d397f7620b57ce4014ee7b0119eef64578d9
Author: mano-wii
Date:   Thu Dec 12 08:55:28 2019 -0300
Branches: master
https://developer.blender.org/rB85b7d397f7620b57ce4014ee7b0119eef64578d9

Fix T72380: New Weld Modifier is crashing when used after a Vertex Weight 
Modifier

It happened when the vertex group was empty.

===

M   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/source/blender/modifiers/intern/MOD_weld.c 
b/source/blender/modifiers/intern/MOD_weld.c
index ca6998b9aa4..ae081942a39 100644
--- a/source/blender/modifiers/intern/MOD_weld.c
+++ b/source/blender/modifiers/intern/MOD_weld.c
@@ -1645,6 +1645,14 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
   BVHTree *bvhtree = bvhtree_from_mesh_verts_ex(
   , mvert, totvert, false, v_mask, v_mask_act, wmd->merge_dist, 
2, 6, 0, NULL);
 
+  if (v_mask) {
+MEM_freeN(v_mask);
+  }
+
+  if (bvhtree == NULL) {
+return result;
+  }
+
   struct WeldOverlapData data;
   data.mvert = mvert;
   data.merge_dist_sq = SQUARE(wmd->merge_dist);
@@ -1855,9 +1863,6 @@ static Mesh *weldModifier_doWeld(WeldModifierData *wmd, 
const ModifierEvalContex
 weld_mesh_context_free(_mesh);
   }
 
-  if (v_mask) {
-MEM_freeN(v_mask);
-  }
   MEM_freeN(overlap);
   return result;
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [f050fa32537] master: Modifier: New Weld Modifier

2019-12-11 Thread mano-wii
Commit: f050fa325375ecf8931750baca7846cd830c7370
Author: mano-wii
Date:   Wed Dec 11 22:31:20 2019 -0300
Branches: master
https://developer.blender.org/rBf050fa325375ecf8931750baca7846cd830c7370

Modifier: New Weld Modifier

Part of T70240

This is the initial implementation of Weld Modifier.
New features will be added later.

ToDo:
- Seams: restrict welding to vertices along boundary edges.
- Edge Collapse: collapse edges below the length threshold.
- New icon.
- Some customdata are not being correctly interpolated.

Differential Revision: https://developer.blender.org/D6383

===

M   release/scripts/startup/bl_ui/properties_data_modifier.py
M   source/blender/editors/space_outliner/outliner_draw.c
M   source/blender/makesdna/DNA_modifier_types.h
M   source/blender/makesrna/RNA_access.h
M   source/blender/makesrna/intern/rna_modifier.c
M   source/blender/modifiers/CMakeLists.txt
M   source/blender/modifiers/MOD_modifiertypes.h
M   source/blender/modifiers/intern/MOD_util.c
A   source/blender/modifiers/intern/MOD_weld.c

===

diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py 
b/release/scripts/startup/bl_ui/properties_data_modifier.py
index f576a29a783..c872b9acd4a 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1481,6 +1481,11 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
 
 col.prop(md, "material_offset", text="Material Offset")
 
+def WELD(self, layout, ob, md):
+layout.prop(md, "merge_threshold", text="Distance")
+layout.prop(md, "max_interactions")
+layout.prop_search(md, "vertex_group", ob, "vertex_groups")
+
 def DATA_TRANSFER(self, layout, ob, md):
 row = layout.row(align=True)
 row.prop(md, "object")
@@ -2372,7 +2377,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, 
Panel):
 subcol.enabled = md.duplications > 0
 subcol.prop(md, "distance")
 subcol.prop(md, "offset", slider=True)
-
+
 subcol.separator()
 
 subcol.prop(md, "enable_fading")
@@ -2408,7 +2413,7 @@ class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, 
Panel):
 row = layout.row(align=True)
 row.prop(md, "layer_pass", text="Pass")
 row.prop(md, "invert_layer_pass", text="", icon='ARROW_LEFTRIGHT')
-
+
 classes = (
 DATA_PT_modifiers,
 DATA_PT_gpencil_modifiers,
diff --git a/source/blender/editors/space_outliner/outliner_draw.c 
b/source/blender/editors/space_outliner/outliner_draw.c
index d25bca2dc0e..486be952b2f 100644
--- a/source/blender/editors/space_outliner/outliner_draw.c
+++ b/source/blender/editors/space_outliner/outliner_draw.c
@@ -2172,6 +2172,9 @@ TreeElementIcon tree_element_get_icon(TreeStoreElem 
*tselem, TreeElement *te)
 case eModifierType_Wireframe:
   data.icon = ICON_MOD_WIREFRAME;
   break;
+case eModifierType_Weld:
+  data.icon = ICON_AUTOMERGE_OFF; /* XXX, needs own icon */
+  break;
 case eModifierType_LaplacianDeform:
   data.icon = ICON_MOD_MESHDEFORM; /* XXX, needs own icon */
   break;
diff --git a/source/blender/makesdna/DNA_modifier_types.h 
b/source/blender/makesdna/DNA_modifier_types.h
index a8db46238d8..0ed9a7f3e5e 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -86,6 +86,7 @@ typedef enum ModifierType {
   eModifierType_MeshSequenceCache = 52,
   eModifierType_SurfaceDeform = 53,
   eModifierType_WeightedNormal = 54,
+  eModifierType_Weld = 55,
   NUM_MODIFIER_TYPES,
 } ModifierType;
 
@@ -1810,6 +1811,16 @@ enum {
   MOD_WIREFRAME_CREASE = (1 << 5),
 };
 
+typedef struct WeldModifierData {
+  ModifierData modifier;
+
+  /* the limit below which to merge vertices in adjacent duplicates */
+  float merge_dist;
+  unsigned int max_interactions;
+  /** Name of vertex group to use to mask, MAX_VGROUP_NAME. */
+  char defgrp_name[64];
+} WeldModifierData;
+
 typedef struct DataTransferModifierData {
   ModifierData modifier;
 
diff --git a/source/blender/makesrna/RNA_access.h 
b/source/blender/makesrna/RNA_access.h
index 94f2ec25ded..696503539a2 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -741,6 +741,7 @@ extern StructRNA RNA_Window;
 extern StructRNA RNA_WindowManager;
 extern StructRNA RNA_WipeSequence;
 extern StructRNA RNA_WireframeModifier;
+extern StructRNA RNA_WeldModifier;
 extern StructRNA RNA_WoodTexture;
 extern StructRNA RNA_WorkSpace;
 extern StructRNA RNA_World;
diff --git a/source/ble

[Bf-blender-cvs] [dc3a165ae0f] master: BLI_bvhtree_overlap_ex: add 'max_interactions' parameter

2019-12-11 Thread mano-wii
Commit: dc3a165ae0f22a4ff36bf9c7cc7fc189c351b35a
Author: mano-wii
Date:   Wed Dec 11 22:21:24 2019 -0300
Branches: master
https://developer.blender.org/rBdc3a165ae0f22a4ff36bf9c7cc7fc189c351b35a

BLI_bvhtree_overlap_ex: add 'max_interactions' parameter

No functional changes.
Allows more performance control and is important for Weld Modifier.

===

M   source/blender/blenlib/BLI_kdopbvh.h
M   source/blender/blenlib/intern/BLI_kdopbvh.c
M   source/blender/bmesh/tools/bmesh_intersect_edges.c

===

diff --git a/source/blender/blenlib/BLI_kdopbvh.h 
b/source/blender/blenlib/BLI_kdopbvh.h
index b305e919e76..70fa633eeac 100644
--- a/source/blender/blenlib/BLI_kdopbvh.h
+++ b/source/blender/blenlib/BLI_kdopbvh.h
@@ -93,7 +93,6 @@ enum {
   /* Use a priority queue to process nodes in the optimal order (for slow 
callbacks) */
   BVH_OVERLAP_USE_THREADING = (1 << 0),
   BVH_OVERLAP_RETURN_PAIRS = (1 << 1),
-  BVH_OVERLAP_BREAK_ON_FIRST = (1 << 2),
 };
 enum {
   /* Use a priority queue to process nodes in the optimal order (for slow 
callbacks) */
@@ -167,7 +166,8 @@ BVHTreeOverlap *BLI_bvhtree_overlap_ex(
 /* optional callback to test the overlap before adding (must be 
thread-safe!) */
 BVHTree_OverlapCallback callback,
 void *userdata,
-int flag);
+const uint max_interactions,
+const int flag);
 BVHTreeOverlap *BLI_bvhtree_overlap(const BVHTree *tree1,
 const BVHTree *tree2,
 unsigned int *r_overlap_tot,
diff --git a/source/blender/blenlib/intern/BLI_kdopbvh.c 
b/source/blender/blenlib/intern/BLI_kdopbvh.c
index ae862c5ece5..71f276bc68f 100644
--- a/source/blender/blenlib/intern/BLI_kdopbvh.c
+++ b/source/blender/blenlib/intern/BLI_kdopbvh.c
@@ -122,6 +122,7 @@ typedef struct BVHOverlapData_Shared {
 typedef struct BVHOverlapData_Thread {
   BVHOverlapData_Shared *shared;
   struct BLI_Stack *overlap; /* store BVHTreeOverlap */
+  uint max_interactions;
   /* use for callbacks */
   int thread;
 } BVHOverlapData_Thread;
@@ -1186,9 +1187,9 @@ static void 
tree_overlap_traverse_cb(BVHOverlapData_Thread *data_thread,
 /**
  * a version of #tree_overlap_traverse_cb that that break on first true return.
  */
-static bool tree_overlap_traverse_first_cb(BVHOverlapData_Thread *data_thread,
-   const BVHNode *node1,
-   const BVHNode *node2)
+static bool tree_overlap_num_recursive(BVHOverlapData_Thread *data_thread,
+   const BVHNode *node1,
+   const BVHNode *node2)
 {
   BVHOverlapData_Shared *data = data_thread->shared;
   int j;
@@ -1213,20 +1214,23 @@ static bool 
tree_overlap_traverse_first_cb(BVHOverlapData_Thread *data_thread,
 overlap->indexA = node1->index;
 overlap->indexB = node2->index;
   }
-  return true;
+  return (--data_thread->max_interactions) == 0;
 }
   }
   else {
 for (j = 0; j < node2->totnode; j++) {
-  if (tree_overlap_traverse_first_cb(data_thread, node1, 
node2->children[j])) {
+  if (tree_overlap_num_recursive(data_thread, node1, 
node2->children[j])) {
 return true;
   }
 }
   }
 }
 else {
+  const uint max_interactions = data_thread->max_interactions;
   for (j = 0; j < node1->totnode; j++) {
-tree_overlap_traverse_first_cb(data_thread, node1->children[j], node2);
+if (tree_overlap_num_recursive(data_thread, node1->children[j], 
node2)) {
+  data_thread->max_interactions = max_interactions;
+}
   }
 }
   }
@@ -1262,17 +1266,16 @@ static void bvhtree_overlap_task_cb(void *__restrict 
userdata,
   }
 }
 
-static void bvhtree_overlap_first_task_cb(void *__restrict userdata,
-  const int j,
-  const TaskParallelTLS *__restrict 
UNUSED(tls))
+static void bvhtree_overlap_num_task_cb(void *__restrict userdata,
+const int j,
+const TaskParallelTLS *__restrict 
UNUSED(tls))
 {
   BVHOverlapData_Thread *data = &((BVHOverlapData_Thread *)userdata)[j];
   BVHOverlapData_Shared *data_shared = data->shared;
 
-  tree_overlap_traverse_first_cb(
-  data,
-  data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
-  data_shared->tree2->nodes[data_shared->tree2->totleaf]);
+  tree_overlap_num_recursive(data,
+ 
data_shared->tree1->nodes[data_shared->tree1->totleaf]->children[j],
+ 
data_sha

[Bf-blender-cvs] [8b308479520] master: Fix T72076: Edit mode circle selection inconsistency with animation

2019-12-04 Thread mano-wii
Commit: 8b30847952080ebc2d36d347de2e6a1f814959f8
Author: mano-wii
Date:   Wed Dec 4 15:07:09 2019 -0300
Branches: master
https://developer.blender.org/rB8b30847952080ebc2d36d347de2e6a1f814959f8

Fix T72076: Edit mode circle selection inconsistency with animation

The solution is to check for updates on `data->recalc`.

===

M   source/blender/draw/engines/select/select_engine.c

===

diff --git a/source/blender/draw/engines/select/select_engine.c 
b/source/blender/draw/engines/select/select_engine.c
index f6e54eef4ed..23399056582 100644
--- a/source/blender/draw/engines/select/select_engine.c
+++ b/source/blender/draw/engines/select/select_engine.c
@@ -223,6 +223,19 @@ static void select_cache_init(void *vedata)
   /* Check if the viewport has changed. */
   float(*persmat)[4] = draw_ctx->rv3d->persmat;
   e_data.context.is_dirty = !compare_m4m4(e_data.context.persmat, persmat, 
FLT_EPSILON);
+
+  if (!e_data.context.is_dirty) {
+/* Check if any of the drawn objects have been transformed. */
+Object **ob = _data.context.objects_drawn[0];
+for (uint i = e_data.context.objects_drawn_len; i--; ob++) {
+  DrawData *data = DRW_drawdata_get(&(*ob)->id, _engine_select_type);
+  if (data && (data->recalc & ID_RECALC_TRANSFORM) != 0) {
+data->recalc &= ~ID_RECALC_TRANSFORM;
+e_data.context.is_dirty = true;
+  }
+}
+  }
+
   if (e_data.context.is_dirty) {
 /* Remove all tags from drawn or culled objects. */
 copy_m4_m4(e_data.context.persmat, persmat);
@@ -280,6 +293,7 @@ static void select_cache_populate(void *vedata, Object *ob)
   sel_data = (SELECTID_ObjectData *)DRW_drawdata_ensure(
   >id, _engine_select_type, sizeof(SELECTID_ObjectData), 
NULL, NULL);
 }
+sel_data->dd.recalc = 0;
 sel_data->drawn_index = e_data.context.objects_drawn_len;
 sel_data->is_drawn = true;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [574a59dfb02] master: Fix T72112: Perpendicular snapping with closest not working

2019-12-03 Thread mano-wii
Commit: 574a59dfb02b40d369d3b02b17de3f2dbd598bec
Author: mano-wii
Date:   Tue Dec 3 12:20:27 2019 -0300
Branches: master
https://developer.blender.org/rB574a59dfb02b40d369d3b02b17de3f2dbd598bec

Fix T72112: Perpendicular snapping with closest not working

The closest target is calculated only after a snap point is found.
So use `center_global` while the target is not calculated.

===

M   source/blender/editors/transform/transform_snap.c

===

diff --git a/source/blender/editors/transform/transform_snap.c 
b/source/blender/editors/transform/transform_snap.c
index 99429db6af7..4b6ab2045c0 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -1362,6 +1362,7 @@ static void TargetSnapClosest(TransInfo *t)
 short snapObjectsTransform(
 TransInfo *t, const float mval[2], float *dist_px, float r_loc[3], float 
r_no[3])
 {
+  float *target = (t->tsnap.status & TARGET_INIT) ? t->tsnap.snapTarget : 
t->center_global;
   return ED_transform_snap_object_project_view3d_ex(
   t->tsnap.object_context,
   t->scene->toolsettings->snap_mode,
@@ -1373,7 +1374,7 @@ short snapObjectsTransform(
SCE_SNAP_BACKFACE_CULLING) != 0,
   },
   mval,
-  t->tsnap.snapTarget,
+  target,
   dist_px,
   r_loc,
   r_no,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4a440ecb99d] blender-v2.81-release: Fix T72071: Crash on snap to edge

2019-12-03 Thread mano-wii
Commit: 4a440ecb99d7f365c754e533023d127a9b806115
Author: mano-wii
Date:   Mon Dec 2 10:30:37 2019 -0300
Branches: blender-v2.81-release
https://developer.blender.org/rB4a440ecb99d7f365c754e533023d127a9b806115

Fix T72071: Crash on snap to edge

Caused when the vertices index is dirty due to some mesh editing
operation like Extrude

===

M   source/blender/editors/transform/transform_snap_object.c

===

diff --git a/source/blender/editors/transform/transform_snap_object.c 
b/source/blender/editors/transform/transform_snap_object.c
index f35a2808f22..c8fa48fefee 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -1312,7 +1312,7 @@ static short snap_mesh_polygon(SnapObjectContext *sctx,
 l_iter = l_first = BM_FACE_FIRST_LOOP(f);
 if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
   elem = SCE_SNAP_MODE_EDGE;
-  BM_mesh_elem_index_ensure(em->bm, BM_EDGE);
+  BM_mesh_elem_index_ensure(em->bm, BM_VERT | BM_EDGE);
   BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE);
   do {
 cb_snap_edge(,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [6334f97093d] blender-v2.81-release: Fix T71558: Hair particles: Brush effect not occluded by emitter geometry

2019-12-03 Thread mano-wii
Commit: 6334f97093d356835c0a5e48a20fd38ee72cdb4d
Author: mano-wii
Date:   Thu Nov 28 13:40:44 2019 -0300
Branches: blender-v2.81-release
https://developer.blender.org/rB6334f97093d356835c0a5e48a20fd38ee72cdb4d

Fix T71558: Hair particles: Brush effect not occluded by emitter geometry

===

M   source/blender/draw/intern/draw_manager.c

===

diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 9e28627ba3d..e3464ae7320 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2668,6 +2668,9 @@ void DRW_draw_depth_object(ARegion *ar, GPUViewport 
*viewport, Object *object)
   RegionView3D *rv3d = ar->regiondata;
 
   DRW_opengl_context_enable();
+  GPU_matrix_projection_set(rv3d->winmat);
+  GPU_matrix_set(rv3d->viewmat);
+  GPU_matrix_mul(object->obmat);
 
   /* Setup framebuffer */
   DefaultFramebufferList *fbl = GPU_viewport_framebuffer_list_get(viewport);
@@ -2675,7 +2678,6 @@ void DRW_draw_depth_object(ARegion *ar, GPUViewport 
*viewport, Object *object)
   GPU_framebuffer_bind(fbl->depth_only_fb);
   GPU_framebuffer_clear_depth(fbl->depth_only_fb, 1.0f);
   GPU_depth_test(true);
-  GPU_matrix_mul(object->obmat);
 
   const float(*world_clip_planes)[4] = NULL;
   if (rv3d->rflag & RV3D_CLIPPING) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [0f521ca4d96] master: Fix T72071: Crash on snap to edge

2019-12-02 Thread mano-wii
Commit: 0f521ca4d9622247a740312e3e318a35c1d85aa9
Author: mano-wii
Date:   Mon Dec 2 10:30:37 2019 -0300
Branches: master
https://developer.blender.org/rB0f521ca4d9622247a740312e3e318a35c1d85aa9

Fix T72071: Crash on snap to edge

Caused when the vertices index is dirty due to some mesh editing
operation like Extrude

===

M   source/blender/editors/transform/transform_snap_object.c

===

diff --git a/source/blender/editors/transform/transform_snap_object.c 
b/source/blender/editors/transform/transform_snap_object.c
index 41486a2f767..604ecb984a9 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -1424,7 +1424,7 @@ static short snap_mesh_polygon(SnapObjectContext *sctx,
 l_iter = l_first = BM_FACE_FIRST_LOOP(f);
 if (snapdata->snap_to_flag & SCE_SNAP_MODE_EDGE) {
   elem = SCE_SNAP_MODE_EDGE;
-  BM_mesh_elem_index_ensure(em->bm, BM_EDGE);
+  BM_mesh_elem_index_ensure(em->bm, BM_VERT | BM_EDGE);
   BM_mesh_elem_table_ensure(em->bm, BM_VERT | BM_EDGE);
   do {
 cb_snap_edge(,

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [3a5d398aaf5] master: Fix T72024: Transform Snap: Alingn Rotation distorts object

2019-11-29 Thread mano-wii
Commit: 3a5d398aaf552c5c5b8662d259bffe3287dc1992
Author: mano-wii
Date:   Fri Nov 29 12:06:02 2019 -0300
Branches: master
https://developer.blender.org/rB3a5d398aaf552c5c5b8662d259bffe3287dc1992

Fix T72024: Transform Snap: Alingn Rotation distorts object

Occurs in edit mode when object has no uniform scale.

===

M   source/blender/editors/transform/transform.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index f3d26f85471..74fc1406795 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -5262,12 +5262,12 @@ static void applyTranslationValue(TransInfo *t, const 
float vec[3])
 copy_v3_v3(tvec, vec);
   }
 
+  mul_m3_v3(td->smtx, tvec);
+
   if (use_rotate_offset) {
 add_v3_v3(tvec, rotate_offset);
   }
 
-  mul_m3_v3(td->smtx, tvec);
-
   if (t->options & CTX_GPENCIL_STROKES) {
 /* grease pencil multiframe falloff */
 bGPDstroke *gps = (bGPDstroke *)td->extra;

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [a8d29ad6e06] master: Fix T71558: Hair particles: Brush effect not occluded by emitter geometry

2019-11-28 Thread mano-wii
Commit: a8d29ad6e0628e315a1cb741b6136ad8823422dd
Author: mano-wii
Date:   Thu Nov 28 13:40:44 2019 -0300
Branches: master
https://developer.blender.org/rBa8d29ad6e0628e315a1cb741b6136ad8823422dd

Fix T71558: Hair particles: Brush effect not occluded by emitter geometry

===

M   source/blender/draw/intern/draw_manager.c

===

diff --git a/source/blender/draw/intern/draw_manager.c 
b/source/blender/draw/intern/draw_manager.c
index 9e28627ba3d..e3464ae7320 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -2668,6 +2668,9 @@ void DRW_draw_depth_object(ARegion *ar, GPUViewport 
*viewport, Object *object)
   RegionView3D *rv3d = ar->regiondata;
 
   DRW_opengl_context_enable();
+  GPU_matrix_projection_set(rv3d->winmat);
+  GPU_matrix_set(rv3d->viewmat);
+  GPU_matrix_mul(object->obmat);
 
   /* Setup framebuffer */
   DefaultFramebufferList *fbl = GPU_viewport_framebuffer_list_get(viewport);
@@ -2675,7 +2678,6 @@ void DRW_draw_depth_object(ARegion *ar, GPUViewport 
*viewport, Object *object)
   GPU_framebuffer_bind(fbl->depth_only_fb);
   GPU_framebuffer_clear_depth(fbl->depth_only_fb, 1.0f);
   GPU_depth_test(true);
-  GPU_matrix_mul(object->obmat);
 
   const float(*world_clip_planes)[4] = NULL;
   if (rv3d->rflag & RV3D_CLIPPING) {

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [177dfc6384b] master: Fix T71273: Bad encoding of utf-8 for Text objects

2019-11-22 Thread mano-wii
Commit: 177dfc6384b926dd19e3b7e98a995ccb4da9167c
Author: mano-wii
Date:   Fri Nov 22 12:26:54 2019 -0300
Branches: master
https://developer.blender.org/rB177dfc6384b926dd19e3b7e98a995ccb4da9167c

Fix T71273: Bad encoding of utf-8 for Text objects

`BLI_strncpy_wchar_from_utf8` internally assumes `wchar_t` is 32 bits
which is not the case on windows.

The solution is to replace `wchar_t` with `char32_t`.

Thanks to @robbott for compatibility on macOS.

Differential Revision: https://developer.blender.org/D6198

===

M   extern/wcwidth/README.blender
M   extern/wcwidth/wcwidth.c
M   extern/wcwidth/wcwidth.h
M   source/blender/blenfont/intern/blf_font.c
M   source/blender/blenkernel/BKE_font.h
M   source/blender/blenkernel/intern/font.c
M   source/blender/blenkernel/intern/object_dupli.c
M   source/blender/blenkernel/intern/text.c
M   source/blender/blenlib/BLI_string_cursor_utf8.h
M   source/blender/blenlib/BLI_string_utf8.h
M   source/blender/blenlib/BLI_sys_types.h
M   source/blender/blenlib/intern/string_cursor_utf8.c
M   source/blender/blenlib/intern/string_utf8.c
M   source/blender/editors/curve/editfont.c
M   source/blender/editors/curve/editfont_undo.c
M   source/blender/makesrna/intern/rna_curve.c

===

diff --git a/extern/wcwidth/README.blender b/extern/wcwidth/README.blender
index 27c8574d1d7..3b32ddc5bc9 100644
--- a/extern/wcwidth/README.blender
+++ b/extern/wcwidth/README.blender
@@ -2,4 +2,6 @@ Project: WC Width
 URL: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
 License: ICS
 Upstream version: 2007-05-26
-Local modifications: None
+Local modifications:
+* Fix T33192
+  Bad encoding of utf-8 on windows systems.
diff --git a/extern/wcwidth/wcwidth.c b/extern/wcwidth/wcwidth.c
index 8cab81e32cd..8922ffe0842 100644
--- a/extern/wcwidth/wcwidth.c
+++ b/extern/wcwidth/wcwidth.c
@@ -59,8 +59,6 @@
  * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c
  */
 
-#include 
-
 #include "wcwidth.h"
 
 struct interval {
@@ -69,7 +67,7 @@ struct interval {
 };
 
 /* auxiliary function for binary search in interval table */
-static int bisearch(wchar_t ucs, const struct interval *table, int max) {
+static int bisearch(char32_t ucs, const struct interval *table, int max) {
   int min = 0;
   int mid;
 
@@ -121,7 +119,7 @@ static int bisearch(wchar_t ucs, const struct interval 
*table, int max) {
  * in ISO 10646.
  */
 
-int mk_wcwidth(wchar_t ucs)
+int mk_wcwidth(char32_t ucs)
 {
   /* sorted list of non-overlapping intervals of non-spacing characters */
   /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */
@@ -206,7 +204,7 @@ int mk_wcwidth(wchar_t ucs)
 }
 
 
-int mk_wcswidth(const wchar_t *pwcs, size_t n)
+int mk_wcswidth(const char32_t *pwcs, size_t n)
 {
   int w, width = 0;
 
@@ -229,7 +227,7 @@ int mk_wcswidth(const wchar_t *pwcs, size_t n)
  * the traditional terminal character-width behaviour. It is not
  * otherwise recommended for general use.
  */
-int mk_wcwidth_cjk(wchar_t ucs)
+int mk_wcwidth_cjk(char32_t ucs)
 {
   /* sorted list of non-overlapping intervals of East Asian Ambiguous
* characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */
@@ -297,7 +295,7 @@ int mk_wcwidth_cjk(wchar_t ucs)
 }
 
 
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n)
+int mk_wcswidth_cjk(const char32_t *pwcs, size_t n)
 {
   int w, width = 0;
 
diff --git a/extern/wcwidth/wcwidth.h b/extern/wcwidth/wcwidth.h
index 9ae6ec9ef14..d87eaf20695 100644
--- a/extern/wcwidth/wcwidth.h
+++ b/extern/wcwidth/wcwidth.h
@@ -20,11 +20,19 @@
 #ifndef __WCWIDTH_H__
 #define __WCWIDTH_H__
 
-#include 
+#ifndef __cplusplus
+#  if defined(__APPLE__)
+/* The  standard header is missing on macOS. */
+#include 
+typedef unsigned int char32_t;
+#  else
+#include 
+#  endif
+#endif
 
-int mk_wcwidth(wchar_t ucs);
-int mk_wcswidth(const wchar_t *pwcs, size_t n);
-int mk_wcwidth_cjk(wchar_t ucs);
-int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n);
+int mk_wcwidth(char32_t ucs);
+int mk_wcswidth(const char32_t *pwcs, size_t n);
+int mk_wcwidth_cjk(char32_t ucs);
+int mk_wcswidth_cjk(const char32_t *pwcs, size_t n);
 
 #endif
diff --git a/source/blender/blenfont/intern/blf_font.c 
b/source/blender/blenfont/intern/blf_font.c
index e0dfa6a2223..1c06dfd3f70 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -504,7 +504,7 @@ int blf_font_draw_mono(FontBLF *font, const char *str, 
size_t len, int cwidth)
 /* do not return this loop if clipped, we want every character tested */
 blf_glyph_render(font, gc, g, (float)pen_x, (float)pen_y);
 
-col = BLI_wcwidth((wchar_t)c);
+col = BLI_wcwidth((char32_t)c);
 if (col < 0) {
   col = 1;
 }
diff --git a/source/blender/blenkernel/BKE_fo

[Bf-blender-cvs] [7b47aca07cd] temp-lanpr-cleanup2: Fix T69799: Glitches when moving object camera is locked to

2019-11-12 Thread mano-wii
Commit: 7b47aca07cd678487da337348937e0105de60ec8
Author: mano-wii
Date:   Fri Nov 8 17:58:00 2019 -0300
Branches: temp-lanpr-cleanup2
https://developer.blender.org/rB7b47aca07cd678487da337348937e0105de60ec8

Fix T69799: Glitches when moving object camera is locked to

The idea is to indicate that the view3d matrix is being transformed too
and this avoids cyclic dependencies.

===

M   source/blender/editors/transform/transform.h
M   source/blender/editors/transform/transform_convert.c

===

diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index c437714956a..0264069c368 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -727,7 +727,7 @@ enum {
   T_EDIT = 1 << 1,
   T_POSE = 1 << 2,
   T_TEXTURE = 1 << 3,
-  /** Transforming the camera while in camera view. */
+  /** Transforming the 3d view. */
   T_CAMERA = 1 << 4,
   /** Transforming the 3D cursor. */
   T_CURSOR = 1 << 5,
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index 64ad8b2091e..c17a726576a 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -2727,6 +2727,9 @@ void createTransData(bContext *C, TransInfo *t)
   t->flag |= T_CAMERA;
 }
   }
+  else if (v3d->ob_centre && v3d->ob_centre->id.tag & LIB_TAG_DOIT) {
+t->flag |= T_CAMERA;
+  }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [98591e30b99] temp-lanpr-cleanup2: Fix T71436: proportional_edit_objects turns off when translating cursor in edit mode

2019-11-12 Thread mano-wii
Commit: 98591e30b9952f49fb2593bfa5219a6df335b7d0
Author: mano-wii
Date:   Sat Nov 9 16:12:27 2019 -0300
Branches: temp-lanpr-cleanup2
https://developer.blender.org/rB98591e30b9952f49fb2593bfa5219a6df335b7d0

Fix T71436: proportional_edit_objects turns off when translating cursor in edit 
mode

===

M   source/blender/editors/transform/transform.c
M   source/blender/editors/transform/transform_convert.c
M   source/blender/editors/transform/transform_generics.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index dd43e487d92..20b72334695 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2133,7 +2133,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator 
*op)
 else if (t->options & CTX_MASK) {
   ts->proportional_mask = proportional != 0;
 }
-else {
+else if ((t->options & CTX_CURSOR) == 0) {
   ts->proportional_objects = proportional != 0;
 }
   }
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index c17a726576a..0c49d67f7a2 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -2391,7 +2391,6 @@ void createTransData(bContext *C, TransInfo *t)
   /* if tests must match recalcData for correct updates */
   if (t->options & CTX_CURSOR) {
 t->flag |= T_CURSOR;
-t->obedit_type = -1;
 
 if (t->spacetype == SPACE_IMAGE) {
   createTransCursor_image(t);
@@ -2407,7 +2406,6 @@ void createTransData(bContext *C, TransInfo *t)
   }
   else if (t->options & CTX_TEXTURE) {
 t->flag |= T_TEXTURE;
-t->obedit_type = -1;
 
 createTransTexspace(t);
 countAndCleanTransDataContainer(t);
diff --git a/source/blender/editors/transform/transform_generics.c 
b/source/blender/editors/transform/transform_generics.c
index afaca361372..0df0b70a56a 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1416,8 +1416,8 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
 {
   Scene *sce = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
-  const eObjectMode object_mode = OBACT(view_layer) ? OBACT(view_layer)->mode 
: OB_MODE_OBJECT;
-  const short object_type = OBACT(view_layer) ? OBACT(view_layer)->type : -1;
+  Object *obact = OBACT(view_layer);
+  const eObjectMode object_mode = obact ? obact->mode : OB_MODE_OBJECT;
   ToolSettings *ts = CTX_data_tool_settings(C);
   ARegion *ar = CTX_wm_region(C);
   ScrArea *sa = CTX_wm_area(C);
@@ -1437,9 +1437,13 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
 
   t->flag = 0;
 
-  t->obedit_type = ((object_mode == OB_MODE_EDIT) || (object_mode == 
OB_MODE_EDIT_GPENCIL)) ?
-   object_type :
-   -1;
+  if (obact && !(t->options & (CTX_CURSOR | CTX_TEXTURE)) &&
+  ELEM(object_mode, OB_MODE_EDIT, OB_MODE_EDIT_GPENCIL)) {
+t->obedit_type = obact->type;
+  }
+  else {
+t->obedit_type = -1;
+  }
 
   /* Many kinds of transform only use a single handle. */
   if (t->data_container == NULL) {
@@ -1776,7 +1780,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
   }
 }
   }
-  else if ((t->obedit_type == -1) && ts->proportional_objects) {
+  else if (!(t->options & CTX_CURSOR) && ts->proportional_objects) {
 t->flag |= T_PROP_EDIT;
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [b720c0f6aa6] master: Fix T71436: proportional_edit_objects turns off when translating cursor in edit mode

2019-11-09 Thread mano-wii
Commit: b720c0f6aa688e42ceb136b90d40ec9b5c60a050
Author: mano-wii
Date:   Sat Nov 9 16:12:27 2019 -0300
Branches: master
https://developer.blender.org/rBb720c0f6aa688e42ceb136b90d40ec9b5c60a050

Fix T71436: proportional_edit_objects turns off when translating cursor in edit 
mode

===

M   source/blender/editors/transform/transform.c
M   source/blender/editors/transform/transform_convert.c
M   source/blender/editors/transform/transform_generics.c

===

diff --git a/source/blender/editors/transform/transform.c 
b/source/blender/editors/transform/transform.c
index dd43e487d92..20b72334695 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2133,7 +2133,7 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator 
*op)
 else if (t->options & CTX_MASK) {
   ts->proportional_mask = proportional != 0;
 }
-else {
+else if ((t->options & CTX_CURSOR) == 0) {
   ts->proportional_objects = proportional != 0;
 }
   }
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index c17a726576a..0c49d67f7a2 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -2391,7 +2391,6 @@ void createTransData(bContext *C, TransInfo *t)
   /* if tests must match recalcData for correct updates */
   if (t->options & CTX_CURSOR) {
 t->flag |= T_CURSOR;
-t->obedit_type = -1;
 
 if (t->spacetype == SPACE_IMAGE) {
   createTransCursor_image(t);
@@ -2407,7 +2406,6 @@ void createTransData(bContext *C, TransInfo *t)
   }
   else if (t->options & CTX_TEXTURE) {
 t->flag |= T_TEXTURE;
-t->obedit_type = -1;
 
 createTransTexspace(t);
 countAndCleanTransDataContainer(t);
diff --git a/source/blender/editors/transform/transform_generics.c 
b/source/blender/editors/transform/transform_generics.c
index afaca361372..0df0b70a56a 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1416,8 +1416,8 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
 {
   Scene *sce = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
-  const eObjectMode object_mode = OBACT(view_layer) ? OBACT(view_layer)->mode 
: OB_MODE_OBJECT;
-  const short object_type = OBACT(view_layer) ? OBACT(view_layer)->type : -1;
+  Object *obact = OBACT(view_layer);
+  const eObjectMode object_mode = obact ? obact->mode : OB_MODE_OBJECT;
   ToolSettings *ts = CTX_data_tool_settings(C);
   ARegion *ar = CTX_wm_region(C);
   ScrArea *sa = CTX_wm_area(C);
@@ -1437,9 +1437,13 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
 
   t->flag = 0;
 
-  t->obedit_type = ((object_mode == OB_MODE_EDIT) || (object_mode == 
OB_MODE_EDIT_GPENCIL)) ?
-   object_type :
-   -1;
+  if (obact && !(t->options & (CTX_CURSOR | CTX_TEXTURE)) &&
+  ELEM(object_mode, OB_MODE_EDIT, OB_MODE_EDIT_GPENCIL)) {
+t->obedit_type = obact->type;
+  }
+  else {
+t->obedit_type = -1;
+  }
 
   /* Many kinds of transform only use a single handle. */
   if (t->data_container == NULL) {
@@ -1776,7 +1780,7 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator 
*op, const wmEvent *eve
   }
 }
   }
-  else if ((t->obedit_type == -1) && ts->proportional_objects) {
+  else if (!(t->options & CTX_CURSOR) && ts->proportional_objects) {
 t->flag |= T_PROP_EDIT;
   }
 }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


[Bf-blender-cvs] [4b229f9e2d5] master: Fix T69799: Glitches when moving object camera is locked to

2019-11-08 Thread mano-wii
Commit: 4b229f9e2d5d8863dd795865726971b1dd4bad3a
Author: mano-wii
Date:   Fri Nov 8 17:58:00 2019 -0300
Branches: master
https://developer.blender.org/rB4b229f9e2d5d8863dd795865726971b1dd4bad3a

Fix T69799: Glitches when moving object camera is locked to

The idea is to indicate that the view3d matrix is being transformed too
and this avoids cyclic dependencies.

===

M   source/blender/editors/transform/transform.h
M   source/blender/editors/transform/transform_convert.c

===

diff --git a/source/blender/editors/transform/transform.h 
b/source/blender/editors/transform/transform.h
index c437714956a..0264069c368 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -727,7 +727,7 @@ enum {
   T_EDIT = 1 << 1,
   T_POSE = 1 << 2,
   T_TEXTURE = 1 << 3,
-  /** Transforming the camera while in camera view. */
+  /** Transforming the 3d view. */
   T_CAMERA = 1 << 4,
   /** Transforming the 3D cursor. */
   T_CURSOR = 1 << 5,
diff --git a/source/blender/editors/transform/transform_convert.c 
b/source/blender/editors/transform/transform_convert.c
index 64ad8b2091e..c17a726576a 100644
--- a/source/blender/editors/transform/transform_convert.c
+++ b/source/blender/editors/transform/transform_convert.c
@@ -2727,6 +2727,9 @@ void createTransData(bContext *C, TransInfo *t)
   t->flag |= T_CAMERA;
 }
   }
+  else if (v3d->ob_centre && v3d->ob_centre->id.tag & LIB_TAG_DOIT) {
+t->flag |= T_CAMERA;
+  }
 }
   }

___
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs


  1   2   3   4   5   6   >