[Bf-blender-cvs] [25820908246] temp_bmesh_multires: Fix bug in previous commit, code was being subject to inside brush test that should not ahve been.
Joseph Eagar
noreply at git.blender.org
Wed Apr 7 10:46:30 CEST 2021
Commit: 25820908246b296a7e532c50658bff90fbcc1517
Author: Joseph Eagar
Date: Wed Apr 7 01:46:10 2021 -0700
Branches: temp_bmesh_multires
https://developer.blender.org/rB25820908246b296a7e532c50658bff90fbcc1517
Fix bug in previous commit, code was being subject to inside
brush test that should not ahve been.
===================================================================
M source/blender/editors/sculpt_paint/sculpt.c
===================================================================
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 8ed8623d36e..6287ae0bff5 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -5092,8 +5092,6 @@ static void do_layer_brush_task_cb_ex(void *__restrict userdata,
bool use_persistent_base = brush->flag & BRUSH_PERSISTENT;
const bool is_bmesh = BKE_pbvh_type(ss->pbvh) == PBVH_BMESH;
- bool reset_disp = false;
-
if (is_bmesh) {
use_persistent_base = use_persistent_base && data->cd_pers_co >= 0;
@@ -5102,8 +5100,24 @@ static void do_layer_brush_task_cb_ex(void *__restrict userdata,
if (!use_persistent_base) {
int nidx = BKE_pbvh_get_node_index(ss->pbvh, data->nodes[n]);
- reset_disp = !BLI_BITMAP_TEST(ss->cache->layer_disp_map, nidx);
- BLI_BITMAP_SET(ss->cache->layer_disp_map, nidx, true);
+ bool reset_disp = !BLI_BITMAP_TEST(ss->cache->layer_disp_map, nidx);
+ if (reset_disp) {
+ PBVHVertexIter vd;
+
+ BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) {
+ BMVert *v = (BMVert *)vd.vertex.i;
+ float *disp_factor = BM_ELEM_CD_GET_VOID_P(v, data->cd_layer_disp);
+
+ *disp_factor = 0.0f;
+
+ // update orig data to while we're at it, just to be paranoid
+ float *dummy;
+
+ BKE_pbvh_bmesh_update_origvert(ss->pbvh, v, &dummy, &dummy, NULL);
+ BLI_BITMAP_SET(ss->cache->layer_disp_map, nidx, true);
+ }
+ BKE_pbvh_vertex_iter_end;
+ }
}
}
else {
@@ -5157,10 +5171,6 @@ static void do_layer_brush_task_cb_ex(void *__restrict userdata,
disp_factor = &ss->cache->layer_displacement_factor[vi];
}
- if (reset_disp) {
- *disp_factor = 0.0f;
- }
-
/* When using persistent base, the layer brush (holding Control) invert mode resets the
* height of the layer to 0. This makes possible to clean edges of previously added layers
* on top of the base. */
@@ -5244,8 +5254,7 @@ static void do_layer_brush(Sculpt *sd, Object *ob, PBVHNode **nodes, int totnode
cd_pers_no = SCULPT_dyntopo_get_templayer(ss, CD_PROP_FLOAT3, SCULPT_LAYER_PERS_NO);
cd_pers_disp = SCULPT_dyntopo_get_templayer(ss, CD_PROP_FLOAT, SCULPT_LAYER_PERS_DISP);
- cd_layer_disp = SCULPT_dyntopo_get_templayer(
- ss, CD_PROP_FLOAT, SCULPT_LAYER_DISP);
+ cd_layer_disp = SCULPT_dyntopo_get_templayer(ss, CD_PROP_FLOAT, SCULPT_LAYER_DISP);
}
else if (ss->cache->layer_displacement_factor == NULL) {
ss->cache->layer_displacement_factor = MEM_callocN(sizeof(float) * SCULPT_vertex_count_get(ss),
More information about the Bf-blender-cvs
mailing list