Commit: 91aaf8df004e6e359dfe1cfde498bf7c746de06b
Author: Lukas Tönne
Date:   Fri Feb 27 17:07:42 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rB91aaf8df004e6e359dfe1cfde498bf7c746de06b

New 'read' flag to toggle reading of the CacheLibrary as a whole.

This is also used during the bake process to avoid confusion: The read
flag gets disabled for the baking cachelib, so that objects don't try
to read cache data that is supposed to be generated.

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

M       release/scripts/startup/bl_ui/properties_scene.py
M       source/blender/editors/io/io_cache_library.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

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

diff --git a/release/scripts/startup/bl_ui/properties_scene.py 
b/release/scripts/startup/bl_ui/properties_scene.py
index a76bd5f..312799b 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -465,7 +465,9 @@ class SCENE_PT_cache_manager(SceneButtonsPanel, Panel):
         col = layout.column(align=True)
         col.label("Archive:")
         col.prop(cachelib, "filepath", text="")
-        col.operator("cachelibrary.bake")
+        row = col.row(align=True)
+        row.prop(cachelib, "read", text="Read", toggle=True)
+        row.operator("cachelibrary.bake")
 
         first = True
         for obcache in cachelib.object_caches:
diff --git a/source/blender/editors/io/io_cache_library.c 
b/source/blender/editors/io/io_cache_library.c
index 2b4f53d..2118925 100644
--- a/source/blender/editors/io/io_cache_library.c
+++ b/source/blender/editors/io/io_cache_library.c
@@ -269,6 +269,9 @@ static void cache_library_bake_startjob(void *customdata, 
short *stop, short *do
        /* XXX how can this be defined properly? */
        required_mode = eModifierMode_Render;
        
+       /* disable reading for the duration of the bake process */
+       data->cachelib->flag &= ~CACHE_LIBRARY_READ;
+       
        data->archive = PTC_cachelib_writers(scene, required_mode, 
data->cachelib, &data->writers);
        
        /* XXX where to get this from? */
@@ -290,6 +293,9 @@ static void cache_library_bake_endjob(void *customdata)
        
        PTC_cachelib_writers_free(data->archive, &data->writers);
        
+       /* enable reading */
+       data->cachelib->flag |= CACHE_LIBRARY_READ;
+       
        /* reset scene frame */
        scene->r.cfra = data->origfra;
        scene->r.framelen = data->origframelen;
diff --git a/source/blender/makesdna/DNA_cache_library_types.h 
b/source/blender/makesdna/DNA_cache_library_types.h
index b37887d..d31956a 100644
--- a/source/blender/makesdna/DNA_cache_library_types.h
+++ b/source/blender/makesdna/DNA_cache_library_types.h
@@ -64,6 +64,9 @@ typedef enum eCacheItem_Flag {
 typedef struct CacheLibrary {
        ID id;
        
+       int flag;
+       int pad;
+       
        char filepath[1024]; /* 1024 = FILE_MAX */
        struct Group *group;
        
@@ -71,5 +74,8 @@ typedef struct CacheLibrary {
        struct GHash *items_hash;       /* runtime: cached items hash for fast 
lookup */
 } CacheLibrary;
 
-#endif
+typedef enum eCacheLibrary_Flag {
+       CACHE_LIBRARY_READ              = 1, /* read data from this cache 
library */
+} eCacheLibrary_Flag;
 
+#endif
diff --git a/source/blender/makesrna/intern/rna_cache_library.c 
b/source/blender/makesrna/intern/rna_cache_library.c
index 2ee0a83..d42f2f7 100644
--- a/source/blender/makesrna/intern/rna_cache_library.c
+++ b/source/blender/makesrna/intern/rna_cache_library.c
@@ -279,6 +279,11 @@ static void rna_def_cache_library(BlenderRNA *brna)
        RNA_def_struct_ui_text(srna, "Cache Library", "Cache Library datablock 
for constructing an archive of caches");
        RNA_def_struct_ui_icon(srna, ICON_PHYSICS);
        
+       prop = RNA_def_property(srna, "read", PROP_BOOLEAN, PROP_NONE);
+       RNA_def_property_boolean_sdna(prop, NULL, "flag", CACHE_LIBRARY_READ);
+       RNA_def_property_ui_text(prop, "Read", "Apply stored data from this 
cache library");
+       RNA_def_property_update(prop, 0, "rna_CacheLibrary_update");
+       
        prop = RNA_def_property(srna, "filepath", PROP_STRING, PROP_FILEPATH);
        RNA_def_property_string_sdna(prop, NULL, "filepath");
        RNA_def_property_ui_text(prop, "File Path", "Path to cache library 
storage");
diff --git a/source/blender/pointcache/PTC_api.cpp 
b/source/blender/pointcache/PTC_api.cpp
index 61b22e2..bd2a75d 100644
--- a/source/blender/pointcache/PTC_api.cpp
+++ b/source/blender/pointcache/PTC_api.cpp
@@ -216,6 +216,8 @@ PTCReader *PTC_reader_from_rna(Scene *scene, PointerRNA 
*ptr)
 
 PTCReader *PTC_cachelib_reader_derived_mesh(CacheLibrary *cachelib, 
PTCReaderArchive *archive, Object *ob)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return NULL;
        CacheItem *item = BKE_cache_library_find_item(cachelib, ob, 
CACHE_TYPE_DERIVED_MESH, -1);
        if (item && (item->flag & CACHE_ITEM_ENABLED)) {
                char name[2*MAX_NAME];
@@ -229,6 +231,8 @@ PTCReader *PTC_cachelib_reader_derived_mesh(CacheLibrary 
*cachelib, PTCReaderArc
 
 PTCReader *PTC_cachelib_reader_hair_dynamics(CacheLibrary *cachelib, 
PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return NULL;
        if (!(psys && psys->part && psys->part->type == PART_HAIR && 
psys->clmd))
                return NULL;
        
@@ -246,6 +250,8 @@ PTCReader *PTC_cachelib_reader_hair_dynamics(CacheLibrary 
*cachelib, PTCReaderAr
 
 PTCReader *PTC_cachelib_reader_particles(CacheLibrary *cachelib, 
PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return NULL;
        if (!(psys && psys->part && psys->part->type != PART_HAIR))
                return NULL;
        
@@ -263,6 +269,8 @@ PTCReader *PTC_cachelib_reader_particles(CacheLibrary 
*cachelib, PTCReaderArchiv
 
 PTCReader *PTC_cachelib_reader_particles_pathcache_parents(CacheLibrary 
*cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return NULL;
        if (!(psys && psys->part && psys->part->type == PART_HAIR))
                return NULL;
        
@@ -280,6 +288,8 @@ PTCReader 
*PTC_cachelib_reader_particles_pathcache_parents(CacheLibrary *cacheli
 
 PTCReader *PTC_cachelib_reader_particles_pathcache_children(CacheLibrary 
*cachelib, PTCReaderArchive *archive, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return NULL;
        if (!(psys && psys->part && psys->part->type == PART_HAIR))
                return NULL;
        
@@ -297,6 +307,9 @@ PTCReader 
*PTC_cachelib_reader_particles_pathcache_children(CacheLibrary *cachel
 
 PTCReadSampleResult PTC_cachelib_read_sample_derived_mesh(Scene *scene, float 
frame, CacheLibrary *cachelib, Object *ob, DerivedMesh **r_dm)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return PTC_READ_SAMPLE_INVALID;
+       
        std::string filename = ptc_archive_path(cachelib->filepath, (ID 
*)cachelib, cachelib->id.lib);
        PTCReaderArchive *archive = PTC_open_reader_archive(scene, 
filename.c_str());
        
@@ -315,6 +328,9 @@ PTCReadSampleResult 
PTC_cachelib_read_sample_derived_mesh(Scene *scene, float fr
 
 PTCReadSampleResult PTC_cachelib_read_sample_hair_dynamics(Scene *scene, float 
frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return PTC_READ_SAMPLE_INVALID;
+       
        std::string filename = ptc_archive_path(cachelib->filepath, (ID 
*)cachelib, cachelib->id.lib);
        PTCReaderArchive *archive = PTC_open_reader_archive(scene, 
filename.c_str());
        
@@ -328,6 +344,9 @@ PTCReadSampleResult 
PTC_cachelib_read_sample_hair_dynamics(Scene *scene, float f
 
 PTCReadSampleResult PTC_cachelib_read_sample_particles(Scene *scene, float 
frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return PTC_READ_SAMPLE_INVALID;
+       
        std::string filename = ptc_archive_path(cachelib->filepath, (ID 
*)cachelib, cachelib->id.lib);
        PTCReaderArchive *archive = PTC_open_reader_archive(scene, 
filename.c_str());
        
@@ -341,6 +360,9 @@ PTCReadSampleResult 
PTC_cachelib_read_sample_particles(Scene *scene, float frame
 
 PTCReadSampleResult PTC_cachelib_read_sample_particles_pathcache_parents(Scene 
*scene, float frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return PTC_READ_SAMPLE_INVALID;
+       
        std::string filename = ptc_archive_path(cachelib->filepath, (ID 
*)cachelib, cachelib->id.lib);
        PTCReaderArchive *archive = PTC_open_reader_archive(scene, 
filename.c_str());
        
@@ -354,6 +376,9 @@ PTCReadSampleResult 
PTC_cachelib_read_sample_particles_pathcache_parents(Scene *
 
 PTCReadSampleResult 
PTC_cachelib_read_sample_particles_pathcache_children(Scene *scene, float 
frame, CacheLibrary *cachelib, Object *ob, ParticleSystem *psys)
 {
+       if (!(cachelib->flag & CACHE_LIBRARY_READ))
+               return PTC_READ_SAMPLE_INVALID;
+       
        std::string filename = ptc_archive_path(cachelib->filepath, (ID 
*)cachelib, cachelib->id.lib);
        PTCReaderArchive *archive = PTC_open_reader_archive(scene, 
filename.c_str());

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

Reply via email to