[Bf-blender-cvs] [028085e] gooseberry: Use correct flag enums for checking render/viewport eval mode when writing derived mesh caches.

Lukas Tönne noreply at git.blender.org
Mon Mar 23 13:02:33 CET 2015


Commit: 028085e856cc927ed904e0785eac30b9ff6786f0
Author: Lukas Tönne
Date:   Wed Mar 4 17:59:48 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB028085e856cc927ed904e0785eac30b9ff6786f0

Use correct flag enums for checking render/viewport eval mode when
writing derived mesh caches.

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

M	source/blender/blenkernel/intern/cache_library.c
M	source/blender/modifiers/intern/MOD_cache.c

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

diff --git a/source/blender/blenkernel/intern/cache_library.c b/source/blender/blenkernel/intern/cache_library.c
index 51fc3f7..b937dc7 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -663,9 +663,19 @@ static int cachelib_writers_cmp(const void *a, const void *b)
 	return la->item->ob > lb->item->ob;
 }
 
+BLI_INLINE int cache_required_mode(CacheLibrary *cachelib)
+{
+	switch (cachelib->eval_mode) {
+		case CACHE_LIBRARY_EVAL_RENDER : return eModifierMode_Render;
+		case CACHE_LIBRARY_EVAL_VIEWPORT : return eModifierMode_Realtime;
+	}
+	return 0;
+}
+
 void BKE_cache_library_writers(CacheLibrary *cachelib, Scene *scene, DerivedMesh **render_dm_ptr, ListBase *writers)
 {
 	const eCacheLibrary_EvalMode eval_mode = cachelib->eval_mode;
+	const int required_mode = cache_required_mode(cachelib);
 	CacheItem *item;
 	
 	BLI_listbase_clear(writers);
@@ -681,7 +691,7 @@ void BKE_cache_library_writers(CacheLibrary *cachelib, Scene *scene, DerivedMesh
 		switch (item->type) {
 			case CACHE_TYPE_DERIVED_MESH: {
 				if (item->ob->type == OB_MESH) {
-					CacheModifierData *cachemd = (CacheModifierData *)mesh_find_cache_modifier(scene, item->ob, CD_MASK_MESH);
+					CacheModifierData *cachemd = (CacheModifierData *)mesh_find_cache_modifier(scene, item->ob, required_mode);
 					if (cachemd) {
 						switch (eval_mode) {
 							case CACHE_LIBRARY_EVAL_VIEWPORT:
diff --git a/source/blender/modifiers/intern/MOD_cache.c b/source/blender/modifiers/intern/MOD_cache.c
index ad9e5f7..d65b769 100644
--- a/source/blender/modifiers/intern/MOD_cache.c
+++ b/source/blender/modifiers/intern/MOD_cache.c
@@ -78,9 +78,8 @@ static void freeData(ModifierData *md)
 
 static DerivedMesh *pointcache_do(CacheModifierData *pcmd, Object *UNUSED(ob), DerivedMesh *dm, ModifierApplyFlag flag)
 {
-	bool use_output_realtime = (flag & eModifierMode_Realtime) && (pcmd->flag & MOD_CACHE_USE_OUTPUT_REALTIME);
-	bool use_output_render = (flag & eModifierMode_Render) && (pcmd->flag & MOD_CACHE_USE_OUTPUT_RENDER);
-	if (use_output_realtime || use_output_render) {
+	bool use_output = (flag & MOD_APPLY_RENDER) ? (pcmd->flag & MOD_CACHE_USE_OUTPUT_RENDER) : (pcmd->flag & MOD_CACHE_USE_OUTPUT_REALTIME);
+	if (use_output) {
 		if (pcmd->output_dm) {
 			pcmd->output_dm->release(pcmd->output_dm);
 		}




More information about the Bf-blender-cvs mailing list