[Bf-blender-cvs] [4cec4d9] gooseberry: Reader/Writer API functions for basic particles.
Lukas Tönne
noreply at git.blender.org
Mon Mar 23 13:01:54 CET 2015
Commit: 4cec4d9d3ca063543bf3fd1533591773c44328fa
Author: Lukas Tönne
Date: Fri Feb 27 15:33:15 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB4cec4d9d3ca063543bf3fd1533591773c44328fa
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 ec4bd62..019bb8d 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -2022,7 +2022,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;
@@ -2038,7 +2038,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;
@@ -2146,7 +2146,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