[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48175] trunk/blender/source/blender: * make it possible to composite without an compositor node [#31878]

Jeroen Bakker j.bakker at atmind.nl
Thu Jun 21 19:58:13 CEST 2012


Revision: 48175
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48175
Author:   jbakker
Date:     2012-06-21 17:58:12 +0000 (Thu, 21 Jun 2012)
Log Message:
-----------
 * make it possible to composite without an compositor node [#31878]
Tiles Compositor: Fails without 'Compositor' output node. Regression.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/COM_compositor.h
    trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
    trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h
    trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
    trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
    trunk/blender/source/blender/compositor/intern/COM_compositor.cpp
    trunk/blender/source/blender/nodes/composite/node_composite_tree.c

Modified: trunk/blender/source/blender/compositor/COM_compositor.h
===================================================================
--- trunk/blender/source/blender/compositor/COM_compositor.h	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/COM_compositor.h	2012-06-21 17:58:12 UTC (rev 48175)
@@ -297,7 +297,7 @@
  *     - output nodes can have different priorities in the WorkScheduler.
  * This is implemented in the COM_execute function.
  */
-void COM_execute(bNodeTree *editingtree, int rendering);
+void COM_execute(RenderData* rd, bNodeTree *editingtree, int rendering);
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-06-21 17:58:12 UTC (rev 48175)
@@ -41,7 +41,7 @@
 
 #include "BKE_global.h"
 
-ExecutionSystem::ExecutionSystem(bNodeTree *editingtree, bool rendering)
+ExecutionSystem::ExecutionSystem(Scene *scene, bNodeTree *editingtree, bool rendering)
 {
 	context.setbNodeTree(editingtree);
 	bNode *gnode;
@@ -62,22 +62,18 @@
 	context.setRendering(rendering);
 	context.setHasActiveOpenCLDevices(WorkScheduler::hasGPUDevices() && (editingtree->flag & NTREE_COM_OPENCL));
 
-	Node *mainOutputNode = NULL;
+	ExecutionSystemHelper::addbNodeTree(*this, 0, editingtree, NULL);
 
-	mainOutputNode = ExecutionSystemHelper::addbNodeTree(*this, 0, editingtree, NULL);
-
-	if (mainOutputNode) {
-		context.setScene((Scene *)mainOutputNode->getbNode()->id);
-		this->convertToOperations();
-		this->groupOperations(); /* group operations in ExecutionGroups */
-		unsigned int index;
-		unsigned int resolution[2];
-		for (index = 0; index < this->groups.size(); index++) {
-			resolution[0] = 0;
-			resolution[1] = 0;
-			ExecutionGroup *executionGroup = groups[index];
-			executionGroup->determineResolution(resolution);
-		}
+	context.setScene(scene);
+	this->convertToOperations();
+	this->groupOperations(); /* group operations in ExecutionGroups */
+	unsigned int index;
+	unsigned int resolution[2];
+	for (index = 0; index < this->groups.size(); index++) {
+		resolution[0] = 0;
+		resolution[1] = 0;
+		ExecutionGroup *executionGroup = groups[index];
+		executionGroup->determineResolution(resolution);
 	}
 
 #ifdef COM_DEBUG

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h	2012-06-21 17:58:12 UTC (rev 48175)
@@ -156,7 +156,7 @@
 	 * @param editingtree [bNodeTree*]
 	 * @param rendering [true false]
 	 */
-	ExecutionSystem(bNodeTree *editingtree, bool rendering);
+	ExecutionSystem(Scene *scene, bNodeTree *editingtree, bool rendering);
 
 	/**
 	 * Destructor

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-06-21 17:58:12 UTC (rev 48175)
@@ -39,21 +39,17 @@
 #include "COM_ReadBufferOperation.h"
 #include "COM_ViewerBaseOperation.h"
 
-Node *ExecutionSystemHelper::addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree, bNode *groupnode)
+void ExecutionSystemHelper::addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree, bNode *groupnode)
 {
 	vector<Node *>& nodes = system.getNodes();
 	vector<SocketConnection *>& links = system.getConnections();
-	Node *mainnode = NULL;
 	const bNode *activeGroupNode = system.getContext().getActivegNode();
 	bool isActiveGroup = activeGroupNode == groupnode;
 	
 	/* add all nodes of the tree to the node list */
 	bNode *node = (bNode *)tree->nodes.first;
 	while (node != NULL) {
-		Node *execnode = addNode(nodes, node, isActiveGroup);
-		if (node->type == CMP_NODE_COMPOSITE) {
-			mainnode = execnode;
-		}
+		addNode(nodes, node, isActiveGroup);
 		node = (bNode *)node->next;
 	}
 
@@ -74,8 +70,6 @@
 			groupNode->ungroup(system);
 		}
 	}
-
-	return mainnode;
 }
 
 void ExecutionSystemHelper::addNode(vector<Node *>& nodes, Node *node)

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-06-21 17:58:12 UTC (rev 48175)
@@ -48,7 +48,7 @@
 	 * @param tree bNodeTree to add
 	 * @return Node representing the "Compositor node" of the maintree. or NULL when a subtree is added
 	 */
-	static Node *addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree, bNode *groupnode);
+	static void addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree, bNode *groupnode);
 
 	/**
 	 * @brief add an editor node to the system.

Modified: trunk/blender/source/blender/compositor/intern/COM_compositor.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_compositor.cpp	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/compositor/intern/COM_compositor.cpp	2012-06-21 17:58:12 UTC (rev 48175)
@@ -25,6 +25,8 @@
 extern "C" {
 	#include "BLI_threads.h"
 }
+#include "BKE_main.h"
+#include "BKE_global.h"
 
 #include "COM_compositor.h"
 #include "COM_ExecutionSystem.h"
@@ -32,7 +34,7 @@
 #include "OCL_opencl.h"
 
 static ThreadMutex *compositorMutex;
-void COM_execute(bNodeTree *editingtree, int rendering)
+void COM_execute(RenderData *rd, bNodeTree *editingtree, int rendering)
 {
 	if (compositorMutex == NULL) { /// TODO: move to blender startup phase
 		compositorMutex = new ThreadMutex();
@@ -41,7 +43,7 @@
 		WorkScheduler::initialize(); ///TODO: call workscheduler.deinitialize somewhere
 	}
 	BLI_mutex_lock(compositorMutex);
-	if (editingtree->test_break && editingtree->test_break(editingtree->tbh)) {
+	if (editingtree->test_break(editingtree->tbh)) {
 		// during editing multiple calls to this method can be triggered.
 		// make sure one the last one will be doing the work.
 		BLI_mutex_unlock(compositorMutex);
@@ -49,13 +51,20 @@
 
 	}
 
+
 	/* set progress bar to 0% and status to init compositing*/
 	editingtree->progress(editingtree->prh, 0.0);
 
 	/* initialize execution system */
-	ExecutionSystem *system = new ExecutionSystem(editingtree, rendering);
-	system->execute();
-	delete system;
+	Scene *scene;
+	for (scene = (Scene*)G.main->scene.first; scene != NULL ; scene = (Scene*)scene->id.next) {
+		if (&scene->r == rd) {
+			ExecutionSystem *system = new ExecutionSystem(scene, editingtree, rendering);
+			system->execute();
+			delete system;
+			break;
+		}
+	}
 
 	BLI_mutex_unlock(compositorMutex);
 }

Modified: trunk/blender/source/blender/nodes/composite/node_composite_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/node_composite_tree.c	2012-06-21 16:05:56 UTC (rev 48174)
+++ trunk/blender/source/blender/nodes/composite/node_composite_tree.c	2012-06-21 17:58:12 UTC (rev 48175)
@@ -683,7 +683,7 @@
 	if (G.rt == 200)
 		ntreeCompositExecTreeOld(ntree, rd, do_preview);
 	else
-		COM_execute(ntree, rendering);
+		COM_execute(rd, ntree, rendering);
 }
 
 /* *********************************************** */




More information about the Bf-blender-cvs mailing list