diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-09-11 06:17:30 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-09-11 06:21:47 +0300 |
commit | 58a8277098b5c8cf43985d7955ad5e5c6f7894ae (patch) | |
tree | deae71172906a3df309c2aa512d938bfe0f04bd4 /source | |
parent | 0b597bf7b96ac7c613f80c11165f869e036d55ef (diff) |
GPU: utility function to unregister presets
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/gpu/GPU_batch_presets.h | 1 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_batch_presets.c | 15 |
2 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/gpu/GPU_batch_presets.h b/source/blender/gpu/GPU_batch_presets.h index 6b010396a9b..d5cabf8bf90 100644 --- a/source/blender/gpu/GPU_batch_presets.h +++ b/source/blender/gpu/GPU_batch_presets.h @@ -49,6 +49,7 @@ struct GPUBatch *GPU_batch_preset_sphere_wire(int lod) ATTR_WARN_UNUSED_RESULT; void gpu_batch_presets_init(void); void gpu_batch_presets_register(struct GPUBatch *preset_batch); +bool gpu_batch_presets_unregister(struct GPUBatch *preset_batch); void gpu_batch_presets_reset(void); void gpu_batch_presets_exit(void); diff --git a/source/blender/gpu/intern/gpu_batch_presets.c b/source/blender/gpu/intern/gpu_batch_presets.c index 83287c57441..126897ac8bf 100644 --- a/source/blender/gpu/intern/gpu_batch_presets.c +++ b/source/blender/gpu/intern/gpu_batch_presets.c @@ -221,12 +221,23 @@ void gpu_batch_presets_register(GPUBatch *preset_batch) BLI_addtail(&presets_list, BLI_genericNodeN(preset_batch)); } +bool gpu_batch_presets_unregister(GPUBatch *preset_batch) +{ + for (LinkData *link = presets_list.last; link; link = link->prev) { + if (preset_batch == link->data) { + BLI_remlink(&presets_list, link); + MEM_freeN(link); + return true; + } + } + return false; +} + void gpu_batch_presets_reset(void) { /* Reset vao caches for these every time we switch opengl context. * This way they will draw correctly for each window. */ - LinkData *link = presets_list.first; - for (link = presets_list.first; link; link = link->next) { + for (LinkData *link = presets_list.first; link; link = link->next) { GPUBatch *preset = link->data; GPU_batch_vao_cache_clear(preset); } |