[Bf-blender-cvs] [8839d963955] greasepencil-object: Merge Object cache allocate and add functions
Antonio Vazquez
noreply at git.blender.org
Mon May 14 20:26:38 CEST 2018
Commit: 8839d963955b289b7255834ddf40fbe91f369562
Author: Antonio Vazquez
Date: Mon May 14 20:26:31 2018 +0200
Branches: greasepencil-object
https://developer.blender.org/rB8839d963955b289b7255834ddf40fbe91f369562
Merge Object cache allocate and add functions
As both functions are called always together, it's better to have in one only.
===================================================================
M source/blender/draw/engines/gpencil/gpencil_cache_utils.c
M source/blender/draw/engines/gpencil/gpencil_draw_utils.c
M source/blender/draw/engines/gpencil/gpencil_engine.c
M source/blender/draw/engines/gpencil/gpencil_engine.h
===================================================================
diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index abfd62bd8d4..dd088ebd6eb 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -37,45 +37,41 @@
#include "draw_cache_impl.h"
- /* allocate cache to store GP objects */
-tGPencilObjectCache *gpencil_object_cache_allocate(tGPencilObjectCache *cache, int *gp_cache_size, int gp_cache_used)
+ /* add a gpencil object to cache to defer drawing */
+tGPencilObjectCache *gpencil_object_cache_add(tGPencilObjectCache *cache_array, Object *ob, bool is_temp,
+ int *gp_cache_size, int *gp_cache_used)
{
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ tGPencilObjectCache *cache_elem = NULL;
+ RegionView3D *rv3d = draw_ctx->rv3d;
tGPencilObjectCache *p = NULL;
/* By default a cache is created with one block with a predefined number of free slots,
if the size is not enough, the cache is reallocated adding a new block of free slots.
This is done in order to keep cache small */
- if (gp_cache_used + 1 > *gp_cache_size) {
- if ((*gp_cache_size == 0) || (cache == NULL)) {
+ if (*gp_cache_used + 1 > *gp_cache_size) {
+ if ((*gp_cache_size == 0) || (cache_array == NULL)) {
p = MEM_callocN(sizeof(struct tGPencilObjectCache) * GP_CACHE_BLOCK_SIZE, "tGPencilObjectCache");
*gp_cache_size = GP_CACHE_BLOCK_SIZE;
}
else {
*gp_cache_size += GP_CACHE_BLOCK_SIZE;
- p = MEM_recallocN(cache, sizeof(struct tGPencilObjectCache) * *gp_cache_size);
+ p = MEM_recallocN(cache_array, sizeof(struct tGPencilObjectCache) * *gp_cache_size);
}
- cache = p;
+ cache_array = p;
}
- return cache;
-}
-/* add a gpencil object to cache to defer drawing */
-void gpencil_object_cache_add(tGPencilObjectCache *cache_array, Object *ob, bool is_temp, int *gp_cache_used)
-{
- const DRWContextState *draw_ctx = DRW_context_state_get();
- tGPencilObjectCache *cache = &cache_array[*gp_cache_used];
- RegionView3D *rv3d = draw_ctx->rv3d;
-
/* zero out all pointers */
- memset(cache, 0, sizeof(*cache));
+ cache_elem = &cache_array[*gp_cache_used];
+ memset(cache_elem, 0, sizeof(*cache_elem));
/* save object */
- cache->ob = ob;
- cache->temp_ob = is_temp;
- cache->idx = *gp_cache_used;
+ cache_elem->ob = ob;
+ cache_elem->temp_ob = is_temp;
+ cache_elem->idx = *gp_cache_used;
- cache->init_grp = 0;
- cache->end_grp = -1;
+ cache_elem->init_grp = 0;
+ cache_elem->end_grp = -1;
/* calculate zdepth from point of view */
float zdepth = 0.0;
@@ -102,9 +98,11 @@ void gpencil_object_cache_add(tGPencilObjectCache *cache_array, Object *ob, bool
zdepth = dist_squared_to_plane_v3(ob->loc, plane_cam);
}
}
- cache->zdepth = zdepth;
+ cache_elem->zdepth = zdepth;
/* increase slots used in cache */
(*gp_cache_used)++;
+
+ return cache_array;
}
/* get current cache data */
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index 14ee9e0af92..fa68f7c5c02 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -1241,8 +1241,8 @@ static void gp_instance_modifier_make_instances(GPENCIL_StorageList *stl, Object
madd_v3_v3fl(newob->obmat[3], mmd->shift, sh);
/* add temp object to cache */
- stl->g_data->gp_object_cache = gpencil_object_cache_allocate(stl->g_data->gp_object_cache, &stl->g_data->gp_cache_size, stl->g_data->gp_cache_used);
- gpencil_object_cache_add(stl->g_data->gp_object_cache, newob, true, &stl->g_data->gp_cache_used);
+ stl->g_data->gp_object_cache = gpencil_object_cache_add(stl->g_data->gp_object_cache, newob, true,
+ &stl->g_data->gp_cache_size, &stl->g_data->gp_cache_used);
}
}
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index e38d4d8488e..f259bbd77e0 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -413,11 +413,9 @@ void GPENCIL_cache_populate(void *vedata, Object *ob)
gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
}
- /* allocate memory for saving gp objects */
- stl->g_data->gp_object_cache = gpencil_object_cache_allocate(stl->g_data->gp_object_cache, &stl->g_data->gp_cache_size, stl->g_data->gp_cache_used);
-
- /* add for drawing later */
- gpencil_object_cache_add(stl->g_data->gp_object_cache, ob, false, &stl->g_data->gp_cache_used);
+ /* allocate memory for saving gp objects for drawing later */
+ stl->g_data->gp_object_cache = gpencil_object_cache_add(stl->g_data->gp_object_cache, ob, false,
+ &stl->g_data->gp_cache_size, &stl->g_data->gp_cache_used);
/* generate instances as separate cache objects for instance modifiers
* with the "Make as Objects" option enabled
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index e522a7daf18..84b65e6a296 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -251,8 +251,8 @@ struct Gwn_Batch *DRW_gpencil_get_buffer_fill_geom(struct bGPdata *gpd);
struct Gwn_Batch *DRW_gpencil_get_buffer_point_geom(struct bGPdata *gpd, float matrix[4][4], short thickness);
/* object cache functions */
-struct tGPencilObjectCache *gpencil_object_cache_allocate(struct tGPencilObjectCache *cache, int *gp_cache_size, int gp_cache_used);
-void gpencil_object_cache_add(struct tGPencilObjectCache *cache, struct Object *ob, bool is_temp, int *gp_cache_used);
+struct tGPencilObjectCache *gpencil_object_cache_add(struct tGPencilObjectCache *cache_array, struct Object *ob,
+ bool is_temp, int *gp_cache_size, int *gp_cache_used);
/* geometry batch cache functions */
void gpencil_batch_cache_check_free_slots(struct Object *ob);
More information about the Bf-blender-cvs
mailing list