From 61cf76071b04cb1a420af185181ea21d76db8725 Mon Sep 17 00:00:00 2001 From: Hans Goudey Date: Wed, 23 Jul 2025 14:38:10 +0200 Subject: [PATCH] Fix #142785: Sculpt mode multires fast navigate artifacts Part of the index buffer was uninitialized. Don't upload that part. Similar to d84f10f2a08569759b20ead606e94008a6c2d899. Pull Request: https://projects.blender.org/blender/blender/pulls/142891 --- source/blender/draw/intern/draw_pbvh.cc | 41 ++++++++++++++++--------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/source/blender/draw/intern/draw_pbvh.cc b/source/blender/draw/intern/draw_pbvh.cc index a0964e3359d..7b889e272a0 100644 --- a/source/blender/draw/intern/draw_pbvh.cc +++ b/source/blender/draw/intern/draw_pbvh.cc @@ -1200,12 +1200,12 @@ static gpu::IndexBufPtr create_lines_index_bmesh(const Set &faces, return gpu::IndexBufPtr(GPU_indexbuf_build_ex(&builder, 0, visible_faces_num * 3, false)); } -static void create_tri_index_grids(const Span grid_indices, - const BitGroupVector<> &grid_hidden, - const int gridsize, - const int skip, - const int totgrid, - MutableSpan data) +static int create_tri_index_grids(const Span grid_indices, + const BitGroupVector<> &grid_hidden, + const int gridsize, + const int skip, + const int totgrid, + MutableSpan data) { int tri_index = 0; int offset = 0; @@ -1235,14 +1235,16 @@ static void create_tri_index_grids(const Span grid_indices, } } } + + return tri_index; } -static void create_tri_index_grids_flat_layout(const Span grid_indices, - const BitGroupVector<> &grid_hidden, - const int gridsize, - const int skip, - const int totgrid, - MutableSpan data) +static int create_tri_index_grids_flat_layout(const Span grid_indices, + const BitGroupVector<> &grid_hidden, + const int gridsize, + const int skip, + const int totgrid, + MutableSpan data) { int tri_index = 0; int offset = 0; @@ -1286,6 +1288,7 @@ static void create_tri_index_grids_flat_layout(const Span grid_indices, } } } + return tri_index; } static void create_lines_index_grids(const Span grid_indices, @@ -1570,14 +1573,22 @@ static gpu::IndexBufPtr create_tri_index_grids(const CCGKey &key, MutableSpan data = GPU_indexbuf_get_data(&builder).cast(); + int tri_count; if (use_flat_layout) { - create_tri_index_grids_flat_layout(grid_indices, grid_hidden, gridsize, skip, totgrid, data); + tri_count = create_tri_index_grids_flat_layout( + grid_indices, grid_hidden, gridsize, skip, totgrid, data); } else { - create_tri_index_grids(grid_indices, grid_hidden, gridsize, skip, totgrid, data); + tri_count = create_tri_index_grids(grid_indices, grid_hidden, gridsize, skip, totgrid, data); } - return gpu::IndexBufPtr(GPU_indexbuf_build_ex(&builder, 0, 6 * visible_quad_len, false)); + builder.index_len = tri_count * 3; + builder.index_min = 0; + builder.index_max = 6 * visible_quad_len; + builder.uses_restart_indices = false; + gpu::IndexBufPtr result = gpu::IndexBufPtr(GPU_indexbuf_calloc()); + GPU_indexbuf_build_in_place(&builder, result.get()); + return result; } static gpu::IndexBufPtr create_lines_index_grids(const CCGKey &key,