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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to