diff options
-rw-r--r-- | source/blender/gpu/GPU_buffers.h | 1 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_buffers.c | 14 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_draw.c | 3 |
3 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/gpu/GPU_buffers.h b/source/blender/gpu/GPU_buffers.h index 9f6f80585ab..fca8dcc3392 100644 --- a/source/blender/gpu/GPU_buffers.h +++ b/source/blender/gpu/GPU_buffers.h @@ -122,6 +122,7 @@ typedef struct GPUAttrib { } GPUAttrib; void GPU_global_buffer_pool_free(void); +void GPU_global_buffer_pool_free_unused(void); GPUBuffer *GPU_buffer_alloc(int size); void GPU_buffer_free(GPUBuffer *buffer); diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 11cf64b0995..c54f937f4a9 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -172,6 +172,15 @@ static void gpu_buffer_pool_free(GPUBufferPool *pool) MEM_freeN(pool); } +static void gpu_buffer_pool_free_unused(GPUBufferPool *pool) +{ + if (!pool) + return; + + while (pool->totbuf) + gpu_buffer_pool_delete_last(pool); +} + static GPUBufferPool *gpu_buffer_pool = NULL; static GPUBufferPool *gpu_get_global_buffer_pool(void) { @@ -188,6 +197,11 @@ void GPU_global_buffer_pool_free(void) gpu_buffer_pool = NULL; } +void GPU_global_buffer_pool_free_unused(void) +{ + gpu_buffer_pool_free_unused(gpu_buffer_pool); +} + /* get a GPUBuffer of at least `size' bytes; uses one from the buffer * pool if possible, otherwise creates a new one */ GPUBuffer *GPU_buffer_alloc(int size) diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 9dc98e59c42..e9f9d4a3379 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -1243,8 +1243,7 @@ void GPU_free_unused_buffers(void) image_free_queue = NULL; /* vbo buffers */ - /* it's probably not necessary to free all buffers every frame */ - /* GPU_buffer_pool_free_unused(0); */ + GPU_global_buffer_pool_free_unused(); BLI_unlock_thread(LOCK_OPENGL); } |