Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Eagar <joeedh@gmail.com>2022-09-29 11:25:28 +0300
committerJoseph Eagar <joeedh@gmail.com>2022-09-29 11:25:47 +0300
commit039429faeb4160cc26b283c7309c9cb9d87ee7c0 (patch)
tree79462c6fd5fdc87a5a32ec10bd25e536d4936b27
parent9be99bcb459f4da9d3fbb83881b3d510c7b528c3 (diff)
Sculpt: fix missing nullptr check in pbvh draw
This time it was face sets.
-rw-r--r--source/blender/draw/intern/draw_pbvh.cc47
-rw-r--r--source/blender/editors/sculpt_paint/sculpt_face_set.cc2
2 files changed, 32 insertions, 17 deletions
diff --git a/source/blender/draw/intern/draw_pbvh.cc b/source/blender/draw/intern/draw_pbvh.cc
index 81550d368a6..2f325f7cf62 100644
--- a/source/blender/draw/intern/draw_pbvh.cc
+++ b/source/blender/draw/intern/draw_pbvh.cc
@@ -550,27 +550,40 @@ struct PBVHBatches {
}
case CD_PBVH_FSET_TYPE: {
int *face_sets = static_cast<int *>(
- CustomData_get_layer(args->pdata, CD_SCULPT_FACE_SETS));
- int last_poly = -1;
- uchar fset_color[3] = {255, 255, 255};
+ CustomData_get_layer_named(args->pdata, CD_PROP_INT32, ".sculpt_face_set"));
- foreach_faces([&](int /*buffer_i*/, int /*tri_i*/, int /*vertex_i*/, const MLoopTri *tri) {
- if (last_poly != tri->poly && args->face_sets) {
- last_poly = tri->poly;
+ if (face_sets) {
+ int last_poly = -1;
+ uchar fset_color[3] = {255, 255, 255};
- const int fset = abs(face_sets[tri->poly]);
+ foreach_faces(
+ [&](int /*buffer_i*/, int /*tri_i*/, int /*vertex_i*/, const MLoopTri *tri) {
+ if (last_poly != tri->poly && args->face_sets) {
+ last_poly = tri->poly;
- if (fset != args->face_sets_color_default) {
- BKE_paint_face_set_overlay_color_get(fset, args->face_sets_color_seed, fset_color);
- }
- else {
- /* Skip for the default color face set to render it white. */
- fset_color[0] = fset_color[1] = fset_color[2] = 255;
- }
- }
+ const int fset = abs(face_sets[tri->poly]);
- *static_cast<uchar3 *>(GPU_vertbuf_raw_step(&access)) = fset_color;
- });
+ if (fset != args->face_sets_color_default) {
+ BKE_paint_face_set_overlay_color_get(
+ fset, args->face_sets_color_seed, fset_color);
+ }
+ else {
+ /* Skip for the default color face set to render it white. */
+ fset_color[0] = fset_color[1] = fset_color[2] = 255;
+ }
+ }
+
+ *static_cast<uchar3 *>(GPU_vertbuf_raw_step(&access)) = fset_color;
+ });
+ }
+ else {
+ uchar fset_color[3] = {255, 255, 255};
+
+ foreach_faces(
+ [&](int /*buffer_i*/, int /*tri_i*/, int /*vertex_i*/, const MLoopTri *tri) {
+ *static_cast<uchar3 *>(GPU_vertbuf_raw_step(&access)) = fset_color;
+ });
+ }
break;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_face_set.cc b/source/blender/editors/sculpt_paint/sculpt_face_set.cc
index be52aaf0aa7..1327f40f95a 100644
--- a/source/blender/editors/sculpt_paint/sculpt_face_set.cc
+++ b/source/blender/editors/sculpt_paint/sculpt_face_set.cc
@@ -134,6 +134,8 @@ static void do_draw_face_sets_brush_task_cb_ex(void *__restrict userdata,
data->ob, ss, ss->cache->automasking, &automask_data, data->nodes[n]);
BKE_pbvh_vertex_iter_begin (ss->pbvh, data->nodes[n], vd, PBVH_ITER_UNIQUE) {
+ SCULPT_automasking_node_update(ss, &automask_data, &vd);
+
if (BKE_pbvh_type(ss->pbvh) == PBVH_FACES) {
MeshElemMap *vert_map = &ss->pmap[vd.index];
for (int j = 0; j < ss->pmap[vd.index].count; j++) {