[Bf-blender-cvs] [304e5a4] alembic_pointcache: Cleanup: replaced the convoluted BKE_ptcache_id_clear function with specific variants for clearing and truncating the cache frame range.

Lukas Tönne noreply at git.blender.org
Thu Feb 12 17:45:45 CET 2015


Commit: 304e5a440a24a011c739b1b3953fbf7c07eecd02
Author: Lukas Tönne
Date:   Thu Feb 12 17:43:52 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rB304e5a440a24a011c739b1b3953fbf7c07eecd02

Cleanup: replaced the convoluted BKE_ptcache_id_clear function with
specific variants for clearing and truncating the cache frame range.

CLEAR_BEFORE is not used anywhere (it doesn't make much sense anyway).
CLEAR_FRAME is just a special version for deleting a single frame and
only used internally prior to replacing a cache frame.

===================================================================

M	source/blender/blenkernel/BKE_pointcache.h
M	source/blender/blenkernel/intern/particle_system.c
M	source/blender/blenkernel/intern/pointcache.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_pointcache.h b/source/blender/blenkernel/BKE_pointcache.h
index 76af442..d863f75 100644
--- a/source/blender/blenkernel/BKE_pointcache.h
+++ b/source/blender/blenkernel/BKE_pointcache.h
@@ -38,15 +38,6 @@
 #include "DNA_boid_types.h"
 #include <stdio.h> /* for FILE */
 
-/* Point cache clearing option, for BKE_ptcache_id_clear, before
- * and after are non inclusive (they wont remove the cfra) */
-typedef enum ePointCache_ClearMode {
-	PTCACHE_CLEAR_ALL       = 0,
-	PTCACHE_CLEAR_FRAME     = 1,
-	PTCACHE_CLEAR_BEFORE    = 2,
-	PTCACHE_CLEAR_AFTER     = 3,
-} ePointCache_ClearMode;
-
 /* Point cache reset options */
 typedef enum ePointCache_ResetMode {
 	PTCACHE_RESET_DEPSGRAPH     = 0,
@@ -258,8 +249,10 @@ void BKE_ptcache_ids_from_object(struct ListBase *lb, struct Object *ob, struct
 /***************** Global funcs ****************************/
 void BKE_ptcache_remove(void);
 
+void BKE_ptcache_clear(struct PTCacheID *pid);
+void BKE_ptcache_truncate(struct PTCacheID *pid, int lastframe);
+
 /************ ID specific functions ************************/
-void    BKE_ptcache_id_clear(PTCacheID *id, int mode, unsigned int cfra);
 int     BKE_ptcache_id_exist(PTCacheID *id, int cfra);
 int     BKE_ptcache_id_reset(struct Scene *scene, PTCacheID *id, int mode);
 void    BKE_ptcache_id_time(PTCacheID *pid, struct Scene *scene, float cfra, int *startframe, int *endframe, float *timescale);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index e832dfd..727a3fd 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -3796,7 +3796,7 @@ static void system_step(ParticleSimulationData *sim, float cfra)
 		sim->psmd->flag |= eParticleSystemFlag_Pars;
 
 		/* XXX needs stitcher implementation to copy over previous samples */
-//		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_AFTER, cfra);
+//		BKE_ptcache_truncate(pid, cfra);
 	}
 
 /* 2. try to read from the cache */
@@ -3919,7 +3919,7 @@ void psys_changed_type(Object *ob, ParticleSystem *psys)
 		CLAMP(part->path_end, 0.0f, 100.0f);
 
 		/* XXX TODO */
-//		BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0);
+//		BKE_ptcache_clear(&pid);
 	}
 	else {
 		free_hair(ob, psys, 1);
@@ -3981,7 +3981,7 @@ static void psys_prepare_physics(ParticleSimulationData *sim)
 		/* XXX TODO */
 //		PTCacheID pid;
 //		BKE_ptcache_id_from_particles(&pid, sim->ob, sim->psys);
-//		BKE_ptcache_id_clear(&pid, PTCACHE_CLEAR_ALL, 0);
+//		BKE_ptcache_clear(&pid);
 	}
 	else {
 		free_keyed_keys(sim->psys);
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 779217d..d2664d9 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -141,7 +141,17 @@ static int ptcache_extra_datasize[] = {
 	sizeof(ParticleSpring)
 };
 
+/* Point cache clearing option, for ptcache_clear_intern, before
+ * and after are non inclusive (they wont remove the cfra) */
+typedef enum ePointCache_ClearMode {
+	PTCACHE_CLEAR_ALL       = 0,
+	PTCACHE_CLEAR_FRAME     = 1,
+	PTCACHE_CLEAR_BEFORE    = 2, /* unused */
+	PTCACHE_CLEAR_AFTER     = 3,
+} ePointCache_ClearMode;
+
 /* forward declerations */
+static void ptcache_clear_intern(PTCacheID *pid, ePointCache_ClearMode mode, unsigned int cfra);
 static int ptcache_file_compressed_read(PTCacheFile *pf, unsigned char *result, unsigned int len);
 static int ptcache_file_compressed_write(PTCacheFile *pf, unsigned char *in, unsigned int in_len, unsigned char *out, int mode);
 static int ptcache_file_write(PTCacheFile *pf, const void *f, unsigned int tot, unsigned int size);
@@ -2005,7 +2015,7 @@ static int ptcache_mem_frame_to_disk(PTCacheID *pid, PTCacheMem *pm)
 	PTCacheFile *pf = NULL;
 	unsigned int i, error = 0;
 	
-	BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_FRAME, pm->frame);
+	ptcache_clear_intern(pid, PTCACHE_CLEAR_FRAME, pm->frame);
 
 	pf = ptcache_file_open(pid, PTCACHE_FILE_WRITE, pm->frame);
 
@@ -2285,13 +2295,13 @@ int BKE_ptcache_read(PTCacheID *pid, float cfra)
 	cfrai = (int)cfra;
 	/* clear invalid cache frames so that better stuff can be simulated */
 	if (cache->state.flag & PTC_STATE_OUTDATED) {
-		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_AFTER, cfrai);
+		BKE_ptcache_truncate(pid, cfrai);
 	}
 	else if (cache->state.flag & PTC_STATE_FRAMES_SKIPPED) {
 		if (cfra <= cache->state.last_exact)
 			cache->state.flag &= ~PTC_STATE_FRAMES_SKIPPED;
 
-		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_AFTER, MAX2(cfrai, cache->state.last_exact));
+		BKE_ptcache_truncate(pid, MAX2(cfrai, cache->state.last_exact));
 	}
 
 	return ret;
@@ -2301,7 +2311,7 @@ static int ptcache_write_stream(PTCacheID *pid, int cfra, int totpoint)
 	PTCacheFile *pf = NULL;
 	int error = 0;
 	
-	BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_FRAME, cfra);
+	ptcache_clear_intern(pid, PTCACHE_CLEAR_FRAME, cfra);
 
 	pf = ptcache_file_open(pid, PTCACHE_FILE_WRITE, cfra);
 
@@ -2396,7 +2406,7 @@ static int ptcache_write_needed(PTCacheID *pid, int cfra, int *overwrite)
 
 	/* always start from scratch on the first frame */
 	if (cfra && cfra == cache->startframe) {
-		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_ALL, cfra);
+		BKE_ptcache_clear(pid);
 		cache->state.flag &= ~PTC_STATE_REDO_NEEDED;
 		return 1;
 	}
@@ -2416,7 +2426,7 @@ static int ptcache_write_needed(PTCacheID *pid, int cfra, int *overwrite)
 	if (efra >= cache->startframe && cfra > efra) {
 		if (ofra >= cache->startframe && efra - ofra < cache->step) {
 			/* overwrite previous frame */
-			BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_FRAME, efra);
+			ptcache_clear_intern(pid, PTCACHE_CLEAR_FRAME, efra);
 			*overwrite = 1;
 		}
 		return 1;
@@ -2466,7 +2476,7 @@ int BKE_ptcache_write(PTCacheID *pid, unsigned int cfra)
  */
 
 /* Clears & resets */
-void BKE_ptcache_id_clear(PTCacheID *pid, int mode, unsigned int cfra)
+static void ptcache_clear_intern(PTCacheID *pid, ePointCache_ClearMode mode, unsigned int cfra)
 {
 	unsigned int len; /* store the length of the string */
 	unsigned int sta, end;
@@ -2567,6 +2577,17 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, unsigned int cfra)
 
 	BKE_ptcache_update_info(pid);
 }
+
+void BKE_ptcache_clear(PTCacheID *pid)
+{
+	ptcache_clear_intern(pid, PTCACHE_CLEAR_ALL, 0);
+}
+
+void BKE_ptcache_truncate(PTCacheID *pid, int lastframe)
+{
+	ptcache_clear_intern(pid, PTCACHE_CLEAR_AFTER, lastframe);
+}
+
 int  BKE_ptcache_id_exist(PTCacheID *pid, int cfra)
 {
 	char filename[MAX_PTCACHE_FILE];
@@ -2718,9 +2739,9 @@ int  BKE_ptcache_id_reset(Scene *scene, PTCacheID *pid, int mode)
 	}
 
 	if (clear)
-		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_ALL, 0);
+		BKE_ptcache_clear(pid);
 	else if (after)
-		BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_AFTER, CFRA);
+		BKE_ptcache_truncate(pid, CFRA);
 
 	return (reset || clear || after);
 }
@@ -2927,7 +2948,7 @@ void BKE_ptcache_to_mem(PTCacheID *pid, ListBase *mem_cache)
 	int cfra, sfra = cache->startframe, efra = cache->endframe;
 
 	/* PTCACHE_DISK_CACHE flag was cleared already */
-	BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_ALL, 0);
+	BKE_ptcache_clear(pid);
 
 	for (cfra=sfra; cfra <= efra; cfra++) {
 		pm = ptcache_disk_frame_to_mem(pid, cfra);
@@ -2941,7 +2962,7 @@ void BKE_ptcache_from_mem(PTCacheID *pid, ListBase *mem_cache)
 	PTCacheMem *pm = mem_cache->first;
 
 	/* PTCACHE_DISK_CACHE flag was set already */
-	BKE_ptcache_id_clear(pid, PTCACHE_CLEAR_ALL, 0);
+	BKE_ptcache_clear(pid);
 
 	for (; pm; pm=pm->next) {
 		if (ptcache_mem_frame_to_disk(pid, pm)==0)




More information about the Bf-blender-cvs mailing list