Commit: ca4735a4853b14de6da30b5903e94940a96cfed7
Author: Lukas Tönne
Date:   Wed Mar 4 19:14:48 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rBca4735a4853b14de6da30b5903e94940a96cfed7

Depsgraph tagging function for cached objects.

This is necessary to trigger object data updates for indirectly linked
objects, which would otherwise not be evaluated.

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

M       source/blender/blenkernel/BKE_cache_library.h
M       source/blender/blenkernel/intern/cache_library.c
M       source/blender/blenkernel/intern/scene.c

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

diff --git a/source/blender/blenkernel/BKE_cache_library.h 
b/source/blender/blenkernel/BKE_cache_library.h
index 49652bf..4d9673b 100644
--- a/source/blender/blenkernel/BKE_cache_library.h
+++ b/source/blender/blenkernel/BKE_cache_library.h
@@ -38,6 +38,7 @@ struct ListBase;
 struct Main;
 struct Object;
 struct Scene;
+struct EvaluationContext;
 struct ParticleSystem;
 
 struct ClothModifierData;
@@ -108,6 +109,8 @@ void BKE_cache_library_writers(struct CacheLibrary 
*cachelib, struct Scene *scen
 struct PTCWriterArchive *BKE_cache_library_writers_open_archive(struct Scene 
*scene, struct CacheLibrary *cachelib, struct ListBase *writers);
 void BKE_cache_library_writers_free(struct PTCWriterArchive *archive, struct 
ListBase *writers);
 
+void BKE_cache_library_dag_recalc_tag(struct EvaluationContext *eval_ctx, 
struct Main *bmain);
+
 eCacheReadSampleResult BKE_cache_library_read_derived_mesh(struct Scene 
*scene, float frame, struct CacheLibrary *cachelib, struct Object *ob, struct 
DerivedMesh **r_dm);
 eCacheReadSampleResult BKE_cache_library_read_hair_dynamics(struct Scene 
*scene, float frame, struct CacheLibrary *cachelib, struct Object *ob, struct 
ParticleSystem *psys);
 eCacheReadSampleResult BKE_cache_library_read_particles(struct Scene *scene, 
float frame, struct CacheLibrary *cachelib, struct Object *ob, struct 
ParticleSystem *psys);
diff --git a/source/blender/blenkernel/intern/cache_library.c 
b/source/blender/blenkernel/intern/cache_library.c
index b937dc7..fd843d4 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -47,6 +47,7 @@
 #include "DNA_scene_types.h"
 
 #include "BKE_cache_library.h"
+#include "BKE_depsgraph.h"
 #include "BKE_DerivedMesh.h"
 #include "BKE_global.h"
 #include "BKE_group.h"
@@ -1117,3 +1118,33 @@ bool BKE_cache_read_particles_pathcache_children(Main 
*bmain, Scene *scene, floa
        }
        return false;
 }
+
+
+void BKE_cache_library_dag_recalc_tag(EvaluationContext *eval_ctx, Main *bmain)
+{
+       eCacheLibrary_EvalMode eval_mode = (eval_ctx->mode == DAG_EVAL_RENDER) 
? CACHE_LIBRARY_EVAL_RENDER : CACHE_LIBRARY_EVAL_VIEWPORT;
+       CacheLibrary *cachelib;
+       
+       FOREACH_CACHELIB_READ(bmain, cachelib, eval_mode) {
+               if (cachelib->flag & CACHE_LIBRARY_READ) {
+                       CacheItem *item;
+                       
+                       for (item = cachelib->items.first; item; item = 
item->next) {
+                               if (item->ob && (item->flag & 
CACHE_ITEM_ENABLED)) {
+                                       
+                                       switch (item->type) {
+                                               case CACHE_TYPE_OBJECT:
+                                                       
DAG_id_tag_update(&item->ob->id, OB_RECALC_OB | OB_RECALC_TIME);
+                                                       break;
+                                               case CACHE_TYPE_DERIVED_MESH:
+                                               case CACHE_TYPE_PARTICLES:
+                                               case CACHE_TYPE_HAIR:
+                                               case CACHE_TYPE_HAIR_PATHS:
+                                                       
DAG_id_tag_update(&item->ob->id, OB_RECALC_DATA | OB_RECALC_TIME);
+                                                       break;
+                                       }
+                               }
+                       }
+               }
+       }
+}
diff --git a/source/blender/blenkernel/intern/scene.c 
b/source/blender/blenkernel/intern/scene.c
index f94f7cd..0de68f0 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -64,6 +64,7 @@
 #include "BKE_animsys.h"
 #include "BKE_action.h"
 #include "BKE_armature.h"
+#include "BKE_cache_library.h"
 #include "BKE_colortools.h"
 #include "BKE_depsgraph.h"
 #include "BKE_editmesh.h"
@@ -1771,6 +1772,9 @@ void BKE_scene_update_for_newframe_ex(EvaluationContext 
*eval_ctx, Main *bmain,
        /* clear animation overrides */
        /* XXX TODO... */
 
+       /* tag cached objects */
+       BKE_cache_library_dag_recalc_tag(eval_ctx, bmain);
+
        for (sce_iter = sce; sce_iter; sce_iter = sce_iter->set)
                DAG_scene_relations_update(bmain, sce_iter);

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

Reply via email to