[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60866] trunk/blender/source/blender/ render/intern/source/pipeline.c: Fix compositor rendering scenes multiple times in some cases

Sergey Sharybin sergey.vfx at gmail.com
Sun Oct 20 03:09:27 CEST 2013


Revision: 60866
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60866
Author:   nazgul
Date:     2013-10-20 01:09:25 +0000 (Sun, 20 Oct 2013)
Log Message:
-----------
Fix compositor rendering scenes multiple times in some cases

Issue was caused by Blender Internal changing LIB_DOIT flag
for scene when it gets updated for new frame. This leads into
conflict with flag used for tagging scenes fr render,

For now made it so nodes are being tagged instead of scene.
Only none node from those who're sharing the scene will be
tagged. And rendering scenes for node tree now checks for
node flag instead of scene's datablock one.

Ideally this tag would be replaced with scenes stored in an
array, but then it's not so clear how to check which node
to update.

Modified Paths:
--------------
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2013-10-20 00:12:54 UTC (rev 60865)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2013-10-20 01:09:25 UTC (rev 60866)
@@ -1600,6 +1600,7 @@
 	
 	/* check for render-layers nodes using other scenes, we tag them LIB_DOIT */
 	for (node = re->scene->nodetree->nodes.first; node; node = node->next) {
+		node->flag &= ~NODE_TEST;
 		if (node->type == CMP_NODE_R_LAYERS) {
 			if (node->id) {
 				if (!MAIN_VERSION_ATLEAST(re->main, 265, 5)) {
@@ -1617,8 +1618,12 @@
 					}
 				}
 
-				if (node->id != (ID *)re->scene)
-					node->id->flag |= LIB_DOIT;
+				if (node->id != (ID *)re->scene) {
+					if ((node->id->flag & LIB_DOIT) == 0) {
+						node->flag |= NODE_TEST;
+						node->id->flag |= LIB_DOIT;
+					}
+				}
 			}
 		}
 	}
@@ -1640,12 +1645,12 @@
 	for (node = re->scene->nodetree->nodes.first; node; node = node->next) {
 		if (node->type == CMP_NODE_R_LAYERS) {
 			if (node->id && node->id != (ID *)re->scene) {
-				if (node->id->flag & LIB_DOIT) {
+				if (node->flag & NODE_TEST) {
 					Scene *scene = (Scene *)node->id;
 
 					render_scene(re, scene, cfra);
 					restore_scene = (scene != re->scene);
-					node->id->flag &= ~LIB_DOIT;
+					node->flag &= ~NODE_TEST;
 					
 					nodeUpdate(re->scene->nodetree, node);
 				}




More information about the Bf-blender-cvs mailing list