[Bf-blender-cvs] [70b56ec] gooseberry: Include mesh writers in the cache writers list.

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


Commit: 70b56ec3786aaeb776b2f2fb26862224fd442588
Author: Lukas Tönne
Date:   Wed Mar 11 16:22:27 2015 +0100
Branches: gooseberry
https://developer.blender.org/rB70b56ec3786aaeb776b2f2fb26862224fd442588

Include mesh writers in the cache writers list.

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

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

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

diff --git a/source/blender/blenkernel/intern/cache_library.c b/source/blender/blenkernel/intern/cache_library.c
index 9e2b124..72e97a0 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -697,10 +697,34 @@ BLI_INLINE int cache_required_mode(CacheLibrary *cachelib)
 }
 #endif
 
-void BKE_cache_library_writers(Main *bmain, CacheLibrary *cachelib, Scene *scene, DerivedMesh **render_dm_ptr, ListBase *writers)
+static void cache_library_object_writers(CacheLibrary *cachelib, Scene *scene, DerivedMesh **render_dm_ptr, ListBase *writers, Object *ob)
 {
 	const eCacheLibrary_EvalMode eval_mode = cachelib->eval_mode;
-	const int required_mode = cache_required_mode(cachelib);
+	CacheItem *item;
+	char name[2*MAX_NAME];
+	
+	if ((item = BKE_cache_library_find_item(cachelib, ob, CACHE_TYPE_OBJECT, -1))) {
+		cachelib_add_writer(writers, PTC_writer_object(ob->id.name, ob), ob);
+	}
+	
+	if ((item = BKE_cache_library_find_item(cachelib, ob, CACHE_TYPE_DERIVED_MESH, -1))) {
+		BKE_cache_item_name(item->ob, item->type, item->index, name);
+		
+		if (ob->type == OB_MESH) {
+			switch (eval_mode) {
+				case CACHE_LIBRARY_EVAL_VIEWPORT:
+					cachelib_add_writer(writers, PTC_writer_derived_final_realtime(name, ob), ob);
+					break;
+				case CACHE_LIBRARY_EVAL_RENDER:
+					cachelib_add_writer(writers, PTC_writer_derived_final_render(name, scene, ob, render_dm_ptr), ob);
+					break;
+			}
+		}
+	}
+}
+
+void BKE_cache_library_writers(Main *bmain, CacheLibrary *cachelib, Scene *scene, DerivedMesh **render_dm_ptr, ListBase *writers)
+{
 	Group *cache_group = cachelib->group;
 	
 	BLI_listbase_clear(writers);
@@ -719,8 +743,10 @@ void BKE_cache_library_writers(Main *bmain, CacheLibrary *cachelib, Scene *scene
 	{
 		Object *ob;
 		for (ob = bmain->object.first; ob; ob = ob->id.next) {
-			if (ob->id.flag & LIB_DOIT)
-				cachelib_add_writer(writers, PTC_writer_object(ob->id.name, ob), ob);
+			if (!(ob->id.flag & LIB_DOIT))
+				continue;
+			
+			cache_library_object_writers(cachelib, scene, render_dm_ptr, writers, ob);
 		}
 	}
 	
@@ -728,8 +754,14 @@ void BKE_cache_library_writers(Main *bmain, CacheLibrary *cachelib, Scene *scene
 	{
 		Group *group;
 		for (group = bmain->group.first; group; group = group->id.next) {
-			if (group->id.flag & LIB_DOIT)
-				cachelib_add_writer(writers, PTC_writer_group(group->id.name, group), NULL);
+			if (!(group->id.flag & LIB_DOIT))
+				continue;
+			
+			/* Note: we don't explicitly enable groups as cache items.
+			 * They only store a list of object references which does not contain much data
+			 * and contains only objects that are themselves enabled.
+			 */
+			cachelib_add_writer(writers, PTC_writer_group(group->id.name, group), NULL);
 		}
 	}




More information about the Bf-blender-cvs mailing list