Sculpt: fix missing nullptr check in pbvh draw
This time it was face sets.
This commit is contained in:
parent
9be99bcb45
commit
039429faeb
Notes:
blender-bot
2023-02-13 14:22:20 +01:00
Referenced by commit 6865aab133
, Cleanup: quiet unused parameter warning in lambda function
Referenced by issue #101502, Regression: Artifacts/crash when sculpting with Dyntopo
Referenced by issue #101467, Regression: Sculpt Mode: Hiding Face Sets will cause glitches
Referenced by issue #101456, Crash when using "draw face sets" tool while cavity auto-mask is checked under "brush" and "options"
Referenced by issue #101453, Regression: Immediate crash when switching to sculpt mode
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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++) {
|
||||
|
|
Loading…
Reference in New Issue