From aa0097ad5e80278c0e08f64472b7bd1b402838da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Tue, 9 Jan 2018 14:09:14 +0100 Subject: DRW: Add instance data memory manager. This is a special memory manager that keeps memory blocks ready to send as vbo data. Since we loose which memory block was used each DRWShadingGroup we need to redistribute them in the same order/size to avoid to realloc each frame. This is why DRWInstanceDatas are sorted in a list for each different data size. --- source/blender/gpu/intern/gpu_viewport.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source/blender/gpu/intern/gpu_viewport.c') diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c index bd563a36f57..c97822dcc2a 100644 --- a/source/blender/gpu/intern/gpu_viewport.c +++ b/source/blender/gpu/intern/gpu_viewport.c @@ -84,6 +84,7 @@ struct GPUViewport { DefaultTextureList *txl; ViewportMemoryPool vmempool; /* Used for rendering data structure. */ + struct DRWInstanceDataList *idatalist; /* Used for rendering data structure. */ ListBase tex_pool; /* ViewportTempTexture list : Temporary textures shared across draw engines */ }; @@ -114,6 +115,7 @@ GPUViewport *GPU_viewport_create(void) GPUViewport *viewport = MEM_callocN(sizeof(GPUViewport), "GPUViewport"); viewport->fbl = MEM_callocN(sizeof(DefaultFramebufferList), "FramebufferList"); viewport->txl = MEM_callocN(sizeof(DefaultTextureList), "TextureList"); + viewport->idatalist = DRW_instance_data_list_create(); viewport->size[0] = viewport->size[1] = -1; @@ -210,6 +212,11 @@ ViewportMemoryPool *GPU_viewport_mempool_get(GPUViewport *viewport) return &viewport->vmempool; } +struct DRWInstanceDataList *GPU_viewport_instance_data_list_get(GPUViewport *viewport) +{ + return viewport->idatalist; +} + void *GPU_viewport_framebuffer_list_get(GPUViewport *viewport) { return viewport->fbl; @@ -599,6 +606,9 @@ void GPU_viewport_free(GPUViewport *viewport) BLI_mempool_destroy(viewport->vmempool.passes); } + DRW_instance_data_list_free(viewport->idatalist); + MEM_freeN(viewport->idatalist); + GPU_viewport_debug_depth_free(viewport); } -- cgit v1.2.3