[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