Commit: 5a86b97991a56c88780fcae70d34ef8a20732269
Author: Lukas Tönne
Date:   Wed Mar 4 17:59:48 2015 +0100
Branches: alembic_pointcache
https://developer.blender.org/rB5a86b97991a56c88780fcae70d34ef8a20732269

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

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

Reply via email to