Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Riakiotakis <kalast@gmail.com>2014-04-02 02:40:05 +0400
committerAntony Riakiotakis <kalast@gmail.com>2014-04-02 02:41:14 +0400
commite60b18d51d58e327031961970405453becca1653 (patch)
tree2da2ba7009e8b04ddc9a33f775748ebba760fdd2 /source/blender/gpu/intern
parent0a112efcf7269f8d50587ab1056d871ef2c0f747 (diff)
Dyntopo: Delete OpenGL buffers of nodes that do not have any more
triangles. It is possible to end up with such nodes using brushes in aggressive collapse mode. Those nodes should normally be cleaned up, since they can never be actually reused (adding more geometry to a node requires the node having some geometry to begin with) but until we support dynamic nodes, better delete those to avoid binding graphics driver resources. If such zero elements buffers were used, GL error out of memory would be reported.
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r--source/blender/gpu/intern/gpu_buffers.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 3882b7c8ebe..3d5879b22d3 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -2046,6 +2046,19 @@ void GPU_update_bmesh_pbvh_buffers(GPU_PBVH_Buffers *buffers,
else
totvert = tottri * 3;
+ /* some nodes may lose all their vertices/faces. Normally we should delete those but since we don't
+ * support dynamic nodes yet, just return immediately to avoid opengl errors */
+ if (!tottri) {
+ if (buffers->index_buf)
+ glDeleteBuffersARB(1, &buffers->index_buf);
+ if (buffers->vert_buf)
+ glDeleteBuffersARB(1, &buffers->vert_buf);
+ buffers->vert_buf = 0;
+ buffers->index_buf = 0;
+ buffers->tot_tri = 0;
+ return;
+ }
+
/* Initialize vertex buffer */
glBindBufferARB(GL_ARRAY_BUFFER_ARB, buffers->vert_buf);
glBufferDataARB(GL_ARRAY_BUFFER_ARB,