diff options
author | Joseph Eagar <joeedh@gmail.com> | 2022-09-29 09:33:02 +0300 |
---|---|---|
committer | Jeroen Bakker <jeroen@blender.org> | 2022-10-03 15:59:17 +0300 |
commit | 3fa3d6c7aac813cbb9b098147f89d9a8bceec776 (patch) | |
tree | c92229dc9f7ee48f5a2895e6d5e3638cb1fa1019 | |
parent | 4b3c2017efa4aeabb28e0f9e8f26785687603fc1 (diff) |
Sculpt: fix missing nullptr check in pbvh draw
Check for nullptr when building mask vbos.
-rw-r--r-- | source/blender/draw/intern/draw_pbvh.cc | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/source/blender/draw/intern/draw_pbvh.cc b/source/blender/draw/intern/draw_pbvh.cc index 7b36cb16cac..432ebbe9452 100644 --- a/source/blender/draw/intern/draw_pbvh.cc +++ b/source/blender/draw/intern/draw_pbvh.cc @@ -533,12 +533,19 @@ struct PBVHBatches { case CD_PBVH_MASK_TYPE: { float *mask = static_cast<float *>(CustomData_get_layer(args->vdata, CD_PAINT_MASK)); - foreach_faces( - [&](int /*buffer_i*/, int /*tri_i*/, int vertex_i, const MLoopTri * /*tri*/) { - *static_cast<uchar *>(GPU_vertbuf_raw_step(&access)) = (uchar)(mask[vertex_i] * - 255.0f); - }); - + if (mask) { + foreach_faces( + [&](int /*buffer_i*/, int /*tri_i*/, int vertex_i, const MLoopTri * /*tri*/) { + *static_cast<uchar *>(GPU_vertbuf_raw_step(&access)) = (uchar)(mask[vertex_i] * + 255.0f); + }); + } + else { + foreach_faces( + [&](int /*buffer_i*/, int /*tri_i*/, int vertex_i, const MLoopTri * /*tri*/) { + *static_cast<uchar *>(GPU_vertbuf_raw_step(&access)) = 0; + }); + } break; } case CD_PBVH_FSET_TYPE: { @@ -731,7 +738,7 @@ struct PBVHBatches { if (cd_mask == -1) { foreach_bmesh( - [&](BMLoop * /*l*/) { *static_cast<float *>(GPU_vertbuf_raw_step(&access)) = 255; }); + [&](BMLoop * /*l*/) { *static_cast<float *>(GPU_vertbuf_raw_step(&access)) = 0; }); } else { foreach_bmesh([&](BMLoop *l) { |