diff options
author | Clément Foucault <foucault.clem@gmail.com> | 2018-01-09 16:09:14 +0300 |
---|---|---|
committer | Clément Foucault <foucault.clem@gmail.com> | 2018-01-09 16:54:11 +0300 |
commit | aa0097ad5e80278c0e08f64472b7bd1b402838da (patch) | |
tree | 9285327504e045bd024c48e594bb190ca1e6bf4f /source/blender/gpu/intern/gpu_viewport.c | |
parent | 2237ee3ed7181a0c14d84fd26dc37cf5292d232d (diff) |
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.
Diffstat (limited to 'source/blender/gpu/intern/gpu_viewport.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_viewport.c | 10 |
1 files changed, 10 insertions, 0 deletions
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); } |