[Bf-blender-cvs] [ca4735a] alembic_pointcache: Depsgraph tagging function for cached objects.

Lukas Tönne noreply at git.blender.org
Wed Mar 4 19:15:40 CET 2015


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);




More information about the Bf-blender-cvs mailing list