From d6be6339f13cf2059916316f8210743e552bf67f Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Tue, 31 Oct 2023 18:17:26 +0100 Subject: [PATCH] Fix: Incorrect PBVH mask drawing after recent change The `COMPONENT_LEN_SCALAR` workaround isn't used for masks which are drawn in a more hard-coded way. --- source/blender/draw/intern/draw_pbvh.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/source/blender/draw/intern/draw_pbvh.cc b/source/blender/draw/intern/draw_pbvh.cc index ebbc3b1e765..42ff9cc3df9 100644 --- a/source/blender/draw/intern/draw_pbvh.cc +++ b/source/blender/draw/intern/draw_pbvh.cc @@ -762,7 +762,22 @@ struct PBVHBatches { if (const float *mask = static_cast( CustomData_get_layer(args.vert_data, CD_PAINT_MASK))) { - extract_data_vert_faces(args, {mask, args.me->totvert}, vert_buf); + const Span corner_verts = args.corner_verts; + const Span looptris = args.mlooptri; + const Span looptri_faces = args.looptri_faces; + const bool *hide_poly = args.hide_poly; + + float *data = static_cast(GPU_vertbuf_get_data(&vert_buf)); + for (const int looptri_i : args.prim_indices) { + if (hide_poly && hide_poly[looptri_faces[looptri_i]]) { + continue; + } + for (int i : IndexRange(3)) { + const int vert = corner_verts[looptris[looptri_i].tri[i]]; + *data = mask[vert]; + data++; + } + } } else { MutableSpan(static_cast(GPU_vertbuf_get_data(vbo.vert_buf)), totvert).fill(0);