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:
authorClément Foucault <foucault.clem@gmail.com>2018-01-09 16:09:14 +0300
committerClément Foucault <foucault.clem@gmail.com>2018-01-09 16:54:11 +0300
commitaa0097ad5e80278c0e08f64472b7bd1b402838da (patch)
tree9285327504e045bd024c48e594bb190ca1e6bf4f /source/blender/gpu/intern/gpu_viewport.c
parent2237ee3ed7181a0c14d84fd26dc37cf5292d232d (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.c10
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);
}