[Bf-blender-cvs] [7c991a6] alembic_pointcache: Reader/Writer API functions for basic particles.

Lukas Tönne noreply at git.blender.org
Fri Feb 27 15:39:42 CET 2015


Commit: 7c991a601a97be61a863ce9028d6ebb152597e8b
Author: Lukas Tönne
Date:   Fri Feb 27 15:33:15 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rB7c991a601a97be61a863ce9028d6ebb152597e8b

Reader/Writer API functions for basic particles.

Also slightly renamed pathcache functions for consistency (use plural
'particles' instead of 'particle').

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

M	source/blender/blenkernel/BKE_cache_library.h
M	source/blender/blenkernel/intern/cache_library.c
M	source/blender/blenkernel/intern/particle.c
M	source/blender/makesdna/DNA_cache_library_types.h
M	source/blender/makesrna/intern/rna_cache_library.c
M	source/blender/pointcache/PTC_api.cpp
M	source/blender/pointcache/PTC_api.h

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

diff --git a/source/blender/blenkernel/BKE_cache_library.h b/source/blender/blenkernel/BKE_cache_library.h
index c5160e6..9edfff9 100644
--- a/source/blender/blenkernel/BKE_cache_library.h
+++ b/source/blender/blenkernel/BKE_cache_library.h
@@ -91,7 +91,8 @@ void BKE_cache_library_group_update(struct Main *bmain, struct CacheLibrary *cac
 bool BKE_cache_read_derived_mesh(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct DerivedMesh **r_dm);
 bool BKE_cache_read_cloth(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ClothModifierData *clmd);
 bool BKE_cache_read_hair_dynamics(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
-bool BKE_cache_read_particle_pathcache_parents(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
-bool BKE_cache_read_particle_pathcache_children(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
+bool BKE_cache_read_particles(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
+bool BKE_cache_read_particles_pathcache_parents(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
+bool BKE_cache_read_particles_pathcache_children(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys);
 
 #endif
diff --git a/source/blender/blenkernel/intern/cache_library.c b/source/blender/blenkernel/intern/cache_library.c
index b04fd04..893717a 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -170,6 +170,9 @@ static int cache_count_items(Object *ob) {
 		if (psys->part->type == PART_HAIR) {
 			totitem += 2; /* hair and hair paths */
 		}
+		else {
+			totitem += 1; /* particles */
+		}
 	}
 	
 	return totitem;
@@ -207,6 +210,13 @@ static void cache_make_items(Object *ob, CacheItem *item) {
 			item->index = i;
 			++item;
 		}
+		else {
+			/* hair paths */
+			item->ob = ob;
+			item->type = CACHE_TYPE_PARTICLES;
+			item->index = i;
+			++item;
+		}
 	}
 }
 
@@ -347,6 +357,7 @@ const char *BKE_cache_item_name_prefix(int type)
 		case CACHE_TYPE_DERIVED_MESH: return "MESH";
 		case CACHE_TYPE_HAIR: return "HAIR";
 		case CACHE_TYPE_HAIR_PATHS: return "HAIRPATHS";
+		case CACHE_TYPE_PARTICLES: return "PARTICLES";
 		default: BLI_assert(false); return NULL; break;
 	}
 }
@@ -561,23 +572,34 @@ bool BKE_cache_read_hair_dynamics(Main *bmain, Scene *scene, float frame, Object
 	return false;
 }
 
-bool BKE_cache_read_particle_pathcache_parents(Main *bmain, Scene *scene, float frame, Object *ob, struct ParticleSystem *psys)
+bool BKE_cache_read_particles(struct Main *bmain, struct Scene *scene, float frame, struct Object *ob, struct ParticleSystem *psys)
+{
+	CacheLibrary *cachelib;
+	
+	for (cachelib = bmain->cache_library.first; cachelib; cachelib = cachelib->id.next) {
+		if (PTC_cachelib_read_sample_particles(scene, frame, cachelib, ob, psys) != PTC_READ_SAMPLE_INVALID)
+			return true;
+	}
+	return false;
+}
+
+bool BKE_cache_read_particles_pathcache_parents(Main *bmain, Scene *scene, float frame, Object *ob, struct ParticleSystem *psys)
 {
 	CacheLibrary *cachelib;
 	
 	for (cachelib = bmain->cache_library.first; cachelib; cachelib = cachelib->id.next) {
-		if (PTC_cachelib_read_sample_particle_pathcache_parents(scene, frame, cachelib, ob, psys) != PTC_READ_SAMPLE_INVALID)
+		if (PTC_cachelib_read_sample_particles_pathcache_parents(scene, frame, cachelib, ob, psys) != PTC_READ_SAMPLE_INVALID)
 			return true;
 	}
 	return false;
 }
 
-bool BKE_cache_read_particle_pathcache_children(Main *bmain, Scene *scene, float frame, Object *ob, struct ParticleSystem *psys)
+bool BKE_cache_read_particles_pathcache_children(Main *bmain, Scene *scene, float frame, Object *ob, struct ParticleSystem *psys)
 {
 	CacheLibrary *cachelib;
 	
 	for (cachelib = bmain->cache_library.first; cachelib; cachelib = cachelib->id.next) {
-		if (PTC_cachelib_read_sample_particle_pathcache_children(scene, frame, cachelib, ob, psys) != PTC_READ_SAMPLE_INVALID)
+		if (PTC_cachelib_read_sample_particles_pathcache_children(scene, frame, cachelib, ob, psys) != PTC_READ_SAMPLE_INVALID)
 			return true;
 	}
 	return false;
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index c0ed7c3..5d84770 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -2354,7 +2354,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim, float cfra, int editupd
 	}
 	
 	/* try reading from point cache */
-	cache_result = BKE_cache_read_particle_pathcache_parents(G.main, sim->scene, cfra, sim->ob, sim->psys);
+	cache_result = BKE_cache_read_particles_pathcache_parents(G.main, sim->scene, cfra, sim->ob, sim->psys);
 	if (!cache_result) {
 		/* cache parent paths */
 		ctx.parent_pass = 1;
@@ -2370,7 +2370,7 @@ void psys_cache_child_paths(ParticleSimulationData *sim, float cfra, int editupd
 		psys_tasks_free(tasks_parent, numtasks_parent);
 	}
 	
-	cache_result = BKE_cache_read_particle_pathcache_children(G.main, sim->scene, cfra, sim->ob, sim->psys);
+	cache_result = BKE_cache_read_particles_pathcache_children(G.main, sim->scene, cfra, sim->ob, sim->psys);
 	if (!cache_result) {
 		/* cache child paths */
 		ctx.parent_pass = 0;
@@ -2482,7 +2482,7 @@ void psys_cache_paths(ParticleSimulationData *sim, float cfra)
 	cache = psys->pathcache = psys_alloc_path_cache_buffers(&psys->pathcachebufs, totpart, segments + 1);
 
 	/* try reading from cache */
-	cache_result = BKE_cache_read_particle_pathcache_parents(G.main, sim->scene, cfra, sim->ob, sim->psys);
+	cache_result = BKE_cache_read_particles_pathcache_parents(G.main, sim->scene, cfra, sim->ob, sim->psys);
 	if (cache_result)
 		return;
 
diff --git a/source/blender/makesdna/DNA_cache_library_types.h b/source/blender/makesdna/DNA_cache_library_types.h
index dba34e0..b37887d 100644
--- a/source/blender/makesdna/DNA_cache_library_types.h
+++ b/source/blender/makesdna/DNA_cache_library_types.h
@@ -43,6 +43,7 @@ typedef enum eCacheItemType {
 	CACHE_TYPE_DERIVED_MESH         = 1,
 	CACHE_TYPE_HAIR                 = 2,
 	CACHE_TYPE_HAIR_PATHS           = 3,
+	CACHE_TYPE_PARTICLES            = 4,
 } eCacheItemType;
 
 typedef struct CacheItem {
diff --git a/source/blender/makesrna/intern/rna_cache_library.c b/source/blender/makesrna/intern/rna_cache_library.c
index e48dd53..2ee0a83 100644
--- a/source/blender/makesrna/intern/rna_cache_library.c
+++ b/source/blender/makesrna/intern/rna_cache_library.c
@@ -42,6 +42,7 @@ EnumPropertyItem cache_library_item_type_items[] = {
     {CACHE_TYPE_DERIVED_MESH,   "DERIVED_MESH",     ICON_OUTLINER_OB_MESH,  "Derived Mesh", "Mesh result from modifiers"},
     {CACHE_TYPE_HAIR,           "HAIR",             ICON_PARTICLE_POINT,    "Hair", "Hair parent strands"},
     {CACHE_TYPE_HAIR_PATHS,     "HAIR_PATHS",       ICON_PARTICLE_PATH,     "Hair Paths", "Full hair paths"},
+    {CACHE_TYPE_PARTICLES,      "PARTICLES",        ICON_PARTICLES,         "Particles", "Emitter particles"},
     {0, NULL, 0, NULL, NULL}
 };
 
diff --git a/source/blender/pointcache/PTC_api.cpp b/source/blender/pointcache/PTC_api.cpp
index fcf3a57..61b22e2 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -244,7 +244,24 @@ PTCReader *PTC_cachelib_reader_hair_dynamics(CacheLibrary *cachelib, PTCReaderAr
 	return NULL;
 }
 
-PTCReader *PTC_cachelib_reader_particle_pathcache_parents(CacheLibrary *cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
+PTCReader *PTC_cachelib_reader_particles(CacheLibrary *cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
+{
+	if (!(psys && psys->part && psys->part->type != PART_HAIR))
+		return NULL;
+	
+	int index = BLI_findindex(&ob->particlesystem, psys);
+	CacheItem *item = BKE_cache_library_find_item(cachelib, ob, CACHE_TYPE_PARTICLES, index);
+	if (item && (item->flag & CACHE_ITEM_ENABLED)) {
+		char name[2*MAX_NAME];
+		BKE_cache_item_name(ob, CACHE_TYPE_PARTICLES, index, name);
+		
+		return PTC_reader_particles(archive, name, ob, psys);
+	}
+	
+	return NULL;
+}
+
+PTCReader *PTC_cachelib_reader_particles_pathcache_parents(CacheLibrary *cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
 	if (!(psys && psys->part && psys->part->type == PART_HAIR))
 		return NULL;
@@ -255,13 +272,13 @@ PTCReader *PTC_cachelib_reader_particle_pathcache_parents(CacheLibrary *cachelib
 		char name[2*MAX_NAME];
 		BKE_cache_item_name(ob, CACHE_TYPE_HAIR_PATHS, index, name);
 		
-		return PTC_reader_particle_pathcache_parents(archive, name, ob, psys);
+		return PTC_reader_particles_pathcache_parents(archive, name, ob, psys);
 	}
 	
 	return NULL;
 }
 
-PTCReader *PTC_cachelib_reader_particle_pathcache_children(CacheLibrary *cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
+PTCReader *PTC_cachelib_reader_particles_pathcache_children(CacheLibrary *cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
 	if (!(psys && psys->part && psys->part->type == PART_HAIR))
 		return NULL;
@@ -272,7 +289,7 @@ PTCReader *PTC_cachelib_reader_particle_pathcache_children(CacheLibrary *cacheli
 		char name[2*MAX_NAME];
 		BKE_cache_item_name(ob, CACHE_TYPE_HAIR_PATHS, index, name);
 		
-		return PTC_reader_particle_pathcache_children(archive, name, ob, psys);
+		return PTC_reader_particles_pathcache_children(archive, name, ob, psys);
 	}
 	
 	return NULL;
@@ -309,12 +326,12 @@ PTCReadSampleResult PTC_cachelib_read_sample_hair_dynamics(Scene *scene, float f
 	return result;
 }
 
-PTCReadSampleResult PTC_cachelib_read_sample_particle_pathcache_parents(Scene *scene, float frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
+PTCReadSampleResult PTC_cachelib_read_sample_particles(Scene *scene, float frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
 {
 	std::string filename = ptc_archive_path(cachelib->filepath, (ID *)cachelib, cachelib->id.lib

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list