[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48584] trunk/blender: Two pass execution:

Jeroen Bakker j.bakker at atmind.nl
Wed Jul 4 13:39:29 CEST 2012


Revision: 48584
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48584
Author:   jbakker
Date:     2012-07-04 11:39:28 +0000 (Wed, 04 Jul 2012)
Log Message:
-----------
Two pass execution:
1. first pass only fast nodes are calculated and only to the active
viewer node
2. second pass all nodes to all outputs

Temp disabled highlights because of random crashes.

Modified Paths:
--------------
    trunk/blender/release/scripts/startup/bl_ui/space_node.py
    trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp
    trunk/blender/source/blender/compositor/intern/COM_CompositorContext.h
    trunk/blender/source/blender/compositor/intern/COM_Converter.cpp
    trunk/blender/source/blender/compositor/intern/COM_Converter.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/compositor/operations/COM_WriteBufferOperation.cpp
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c

Modified: trunk/blender/release/scripts/startup/bl_ui/space_node.py
===================================================================
--- trunk/blender/release/scripts/startup/bl_ui/space_node.py	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/release/scripts/startup/bl_ui/space_node.py	2012-07-04 11:39:28 UTC (rev 48584)
@@ -233,9 +233,10 @@
         layout.prop(tree, "edit_quality", text="Edit")
         layout.prop(tree, "chunk_size")
         layout.prop(tree, "use_opencl")
+        layout.prop(tree, "two_pass")
         layout.prop(snode, "show_highlight")
+        
 
-
 class NODE_MT_node_color_presets(Menu):
     """Predefined node color"""
     bl_label = "Color Presets"

Modified: trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -30,6 +30,7 @@
 	this->m_quality = COM_QUALITY_HIGH;
 	this->m_hasActiveOpenCLDevices = false;
 	this->m_activegNode = NULL;
+	this->m_fastCalculation = false;
 }
 
 const int CompositorContext::getFramenumber() const

Modified: trunk/blender/source/blender/compositor/intern/COM_CompositorContext.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_CompositorContext.h	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_CompositorContext.h	2012-07-04 11:39:28 UTC (rev 48584)
@@ -73,6 +73,11 @@
 	 * @brief does this system have active opencl devices?
 	 */
 	bool m_hasActiveOpenCLDevices;
+	
+	/**
+	 * @brief Skip slow nodes
+	 */
+	bool m_fastCalculation;
 
 public:
 	/**
@@ -148,6 +153,9 @@
 	int getChunksize() { return this->getbNodeTree()->chunksize; }
 	
 	const int isColorManaged() const;
+	
+	void setFastCalculation(bool fastCalculation) {this->m_fastCalculation = fastCalculation;}
+	bool isFastCalculation() {return this->m_fastCalculation;}
 };
 
 

Modified: trunk/blender/source/blender/compositor/intern/COM_Converter.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_Converter.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_Converter.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -117,7 +117,7 @@
 #include "COM_ViewerNode.h"
 #include "COM_ZCombineNode.h"
 
-Node *Converter::convert(bNode *b_node)
+Node *Converter::convert(bNode *b_node, bool fast)
 {
 	Node *node;
 
@@ -125,6 +125,22 @@
 		node = new MuteNode(b_node);
 		return node;
 	}
+	if (fast) {
+		if (b_node->type == CMP_NODE_BLUR ||
+		        b_node->type == CMP_NODE_VECBLUR ||
+		        b_node->type == CMP_NODE_BILATERALBLUR ||
+		        b_node->type == CMP_NODE_DEFOCUS ||
+		        b_node->type == CMP_NODE_BOKEHBLUR ||
+		        b_node->type == CMP_NODE_GLARE ||
+		        b_node->type == CMP_NODE_DBLUR ||
+		        b_node->type == CMP_NODE_MOVIEDISTORTION ||
+		        b_node->type == CMP_NODE_LENSDIST ||
+		        b_node->type == CMP_NODE_DOUBLEEDGEMASK ||
+		        b_node->type == CMP_NODE_DILATEERODE) 
+		{
+			return new MuteNode(b_node);
+		}
+	}
 
 	switch (b_node->type) {
 		case CMP_NODE_COMPOSITE:

Modified: trunk/blender/source/blender/compositor/intern/COM_Converter.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_Converter.h	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_Converter.h	2012-07-04 11:39:28 UTC (rev 48584)
@@ -42,7 +42,7 @@
 	 * @see Node
 	 * @see MuteNode
 	 */
-	static Node *convert(bNode *b_node);
+	static Node *convert(bNode *b_node, bool fast);
 	
 	/**
 	 * @brief This method will add a datetype conversion rule when the to-socket does not support the from-socket actual data type.

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -44,9 +44,10 @@
 #include "MEM_guardedalloc.h"
 #endif
 
-ExecutionSystem::ExecutionSystem(RenderData *rd, bNodeTree *editingtree, bool rendering)
+ExecutionSystem::ExecutionSystem(RenderData *rd, bNodeTree *editingtree, bool rendering, bool fastcalculation)
 {
 	this->m_context.setbNodeTree(editingtree);
+	this->m_context.setFastCalculation(fastcalculation);
 	bNode *gnode;
 	for (gnode = (bNode *)editingtree->nodes.first; gnode; gnode = (bNode *)gnode->next) {
 		if (gnode->type == NODE_GROUP && gnode->typeinfo->group_edit_get(gnode)) {
@@ -137,8 +138,10 @@
 	WorkScheduler::start(this->m_context);
 
 	executeGroups(COM_PRIORITY_HIGH);
-	executeGroups(COM_PRIORITY_MEDIUM);
-	executeGroups(COM_PRIORITY_LOW);
+	if (!this->getContext().isFastCalculation()) {
+		executeGroups(COM_PRIORITY_MEDIUM);
+		executeGroups(COM_PRIORITY_LOW);
+	}
 
 	WorkScheduler::finish();
 	WorkScheduler::stop();

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.h	2012-07-04 11:39:28 UTC (rev 48584)
@@ -156,7 +156,7 @@
 	 * @param editingtree [bNodeTree*]
 	 * @param rendering [true false]
 	 */
-	ExecutionSystem(RenderData *rd, bNodeTree *editingtree, bool rendering);
+	ExecutionSystem(RenderData *rd, bNodeTree *editingtree, bool rendering, bool fastcalculation);
 
 	/**
 	 * Destructor

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -49,7 +49,7 @@
 	/* add all nodes of the tree to the node list */
 	bNode *node = (bNode *)tree->nodes.first;
 	while (node != NULL) {
-		addNode(nodes, node, isActiveGroup);
+		addNode(nodes, node, isActiveGroup, system.getContext().isFastCalculation());
 		node = (bNode *)node->next;
 	}
 
@@ -77,11 +77,11 @@
 	nodes.push_back(node);
 }
 
-Node *ExecutionSystemHelper::addNode(vector<Node *>& nodes, bNode *b_node, bool inActiveGroup)
+Node *ExecutionSystemHelper::addNode(vector<Node *>& nodes, bNode *b_node, bool inActiveGroup, bool fast)
 {
 	Converter converter;
 	Node *node;
-	node = converter.convert(b_node);
+	node = converter.convert(b_node, fast);
 	node->setIsInActiveGroup(inActiveGroup);
 	if (node != NULL) {
 		addNode(nodes, node);

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-07-04 11:39:28 UTC (rev 48584)
@@ -58,7 +58,7 @@
 	 * @param bNode node to add
 	 * @return Node that represents the bNode or null when not able to convert.
 	 */
-	static Node *addNode(vector<Node *>& nodes, bNode *b_node, bool isInActiveGroup);
+	static Node *addNode(vector<Node *>& nodes, bNode *b_node, bool isInActiveGroup, bool fast);
 
 	/**
 	 * @brief Add a Node to a list

Modified: trunk/blender/source/blender/compositor/intern/COM_compositor.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_compositor.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/intern/COM_compositor.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -57,8 +57,23 @@
 	/* set progress bar to 0% and status to init compositing*/
 	editingtree->progress(editingtree->prh, 0.0);
 
+	bool twopass = (editingtree->flag&NTREE_TWO_PASS) > 0 || rendering;
 	/* initialize execution system */
-	ExecutionSystem *system = new ExecutionSystem(rd, editingtree, rendering);
+	if (twopass) {
+		ExecutionSystem *system = new ExecutionSystem(rd, editingtree, rendering, twopass);
+		system->execute();
+		delete system;
+		
+		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);
+			return;
+		}
+	}
+
+	
+	ExecutionSystem *system = new ExecutionSystem(rd, editingtree, rendering, false);
 	system->execute();
 	delete system;
 

Modified: trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.cpp	2012-07-04 10:01:45 UTC (rev 48583)
+++ trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.cpp	2012-07-04 11:39:28 UTC (rev 48584)
@@ -64,7 +64,7 @@
 	float *buffer = memoryBuffer->getBuffer();
 	if (this->m_input->isComplex()) {
 		bNode* bnode = this->m_input->getbNode();
-		if (bnode&& bnode->new_node) bnode->new_node->highlight++;
+//		if (bnode&& bnode->new_node) bnode->new_node->highlight++;
 
 		void *data = this->m_input->initializeTileData(rect, memoryBuffers);
 		int x1 = rect->xmin;
@@ -90,7 +90,7 @@
 			this->m_input->deinitializeTileData(rect, memoryBuffers, data);
 			data = NULL;
 		}
-		if (bnode&& bnode->new_node) bnode->new_node->highlight++;
+//		if (bnode&& bnode->new_node) bnode->new_node->highlight++;
 	}
 	else {
 		int x1 = rect->xmin;
@@ -144,7 +144,7 @@
 	clMemToCleanUp->push_back(clOutputBuffer);
 	list<cl_kernel> *clKernelsToCleanUp = new list<cl_kernel>();
 	bNode* bnode = this->m_input->getbNode();
-	if (bnode&& bnode->new_node) bnode->new_node->highlight++;
+//	if (bnode&& bnode->new_node) bnode->new_node->highlight++;
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list