diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2014-05-05 22:13:27 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2014-05-05 22:13:27 +0400 |
commit | 9a1c47de444eec6f6f73896aff8712c6847d328f (patch) | |
tree | 7b8fe758e814f0e743753e542fbaa137dc391405 /source/blender/gpu/intern | |
parent | fbfaa4770dea5cac9f8f7baa955d33fb219bd74b (diff) |
Attempt to solve T39950,
Avoid filling up buffers when total buffer triangles are zero.
Better still would be to tag a node as hidden when doing recreation of
the PBVH tree by checking for any visible elements. Original bug report
probably has to do with OpenGL doing something funky but hidden nodes
should be tagged as hidden to completely avoid iterating for painting.
This is to be done in a later commit.
Also some naming cleanup for consistency, GPU_build_pbvh_mesh_buffers to
GPU_build_mesh_pbvh_buffers.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_buffers.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 9bf63d2fe29..e33d72e980c 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -1623,7 +1623,7 @@ void GPU_update_mesh_pbvh_buffers(GPU_PBVH_Buffers *buffers, MVert *mvert, buffers->mvert = mvert; } -GPU_PBVH_Buffers *GPU_build_pbvh_mesh_buffers(int (*face_vert_indices)[4], +GPU_PBVH_Buffers *GPU_build_mesh_pbvh_buffers(int (*face_vert_indices)[4], MFace *mface, MVert *mvert, int *face_indices, int totface) @@ -1646,6 +1646,16 @@ GPU_PBVH_Buffers *GPU_build_pbvh_mesh_buffers(int (*face_vert_indices)[4], tottri += f->v4 ? 2 : 1; } + if (tottri == 0) { + buffers->tot_tri = 0; + + buffers->mface = mface; + buffers->face_indices = face_indices; + buffers->totface = 0; + + return buffers; + } + /* An element index buffer is used for smooth shading, but flat * shading requires separate vertex normals so an index buffer is * can't be used there. */ @@ -1966,6 +1976,10 @@ GPU_PBVH_Buffers *GPU_build_grid_pbvh_buffers(int *grid_indices, int totgrid, /* Count the number of quads */ totquad = gpu_count_grid_quads(grid_hidden, grid_indices, totgrid, gridsize); + /* totally hidden node, return here to avoid BufferData with zero below. */ + if (totquad == 0) + return buffers; + if (totquad == fully_visible_totquad) { buffers->index_buf = gpu_get_grid_buffer(gridsize, &buffers->index_type, &buffers->tot_quad); buffers->has_hidden = 0; |