[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