[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47770] trunk/blender/source/blender/ compositor: * FIX for

Jeroen Bakker j.bakker at atmind.nl
Tue Jun 12 06:23:42 CEST 2012


Revision: 47770
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47770
Author:   jbakker
Date:     2012-06-12 04:23:21 +0000 (Tue, 12 Jun 2012)
Log Message:
-----------
 * FIX for
   - [#31777] Border Crop gives black 
   - [#31768] Crash when connecting a Math node to a translate node in Tiles comp
   - [#31638] View node in new node compo system crashes when inside a group
 * make sure a very fast vignette can be made by using a EliipseMask + Fast Gaussian blur

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/COM_defines.h
    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_ExecutionGroup.cpp
    trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
    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_Node.cpp
    trunk/blender/source/blender/compositor/intern/COM_Node.h
    trunk/blender/source/blender/compositor/intern/COM_NodeOperation.h
    trunk/blender/source/blender/compositor/intern/COM_OutputSocket.cpp
    trunk/blender/source/blender/compositor/nodes/COM_GroupNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_SplitViewerNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_ViewerNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_BokehBlurOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_BokehImageOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_PreviewOperation.h
    trunk/blender/source/blender/compositor/operations/COM_ReadBufferOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_ReadBufferOperation.h
    trunk/blender/source/blender/compositor/operations/COM_RotateOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_RotateOperation.h
    trunk/blender/source/blender/compositor/operations/COM_SetVectorOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_SocketProxyOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_TranslateOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_TranslateOperation.h
    trunk/blender/source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_WriteBufferOperation.h

Modified: trunk/blender/source/blender/compositor/COM_defines.h
===================================================================
--- trunk/blender/source/blender/compositor/COM_defines.h	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/COM_defines.h	2012-06-12 04:23:21 UTC (rev 47770)
@@ -70,6 +70,7 @@
 // chunk size determination
 #define COM_PREVIEW_SIZE 140.0f
 //#define COM_OPENCL_ENABLED
+//#define COM_DEBUG
 
 // workscheduler threading models
 /**
@@ -106,7 +107,4 @@
 
 #define COM_NUMBER_OF_CHANNELS 4
 
-#define COM_DEFAULT_RESOLUTION_WIDTH 640
-#define COM_DEFAULT_RESOLUTION_HEIGHT 480
-
 #endif

Modified: trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_CompositorContext.cpp	2012-06-12 04:23:21 UTC (rev 47770)
@@ -29,6 +29,7 @@
 	this->scene = NULL;
 	this->quality = COM_QUALITY_HIGH;
 	this->hasActiveOpenCLDevices = false;
+	this->activegNode = NULL;
 }
 
 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-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_CompositorContext.h	2012-06-12 04:23:21 UTC (rev 47770)
@@ -63,6 +63,11 @@
 	  * @see ExecutionSystem
 	  */
 	bNodeTree *bnodetree;
+	
+	/**
+	 * @brief activegNode the group node that is currently being edited.
+	 */
+	bNode *activegNode;
 
 	/**
 	  * @brief does this system have active opencl devices?
@@ -101,6 +106,16 @@
 	const bNodeTree * getbNodeTree() const {return this->bnodetree;}
 
 	/**
+	  * @brief set the active groupnode of the context
+	  */
+	void setActivegNode(bNode *gnode) {this->activegNode = gnode;}
+
+	/**
+	  * @brief get the active groupnode of the context
+	  */
+	const bNode * getActivegNode() const {return this->activegNode;}
+
+	/**
 	  * @brief get the scene of the context
 	  */
 	const Scene *getScene() const {return this->scene;}

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionGroup.cpp	2012-06-12 04:23:21 UTC (rev 47770)
@@ -184,11 +184,8 @@
 void ExecutionGroup::determineResolution(unsigned int resolution[])
 {
 	NodeOperation *operation = this->getOutputNodeOperation();
-	unsigned int preferredResolution[2];
-	preferredResolution[0] = 0;
-	preferredResolution[1] = 0;
-	operation->determineResolution(resolution, preferredResolution);
-	operation->setResolution(resolution);
+	resolution[0] = operation->getWidth();
+	resolution[1] = operation->getHeight();
 	this->setResolution(resolution);
 }
 

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystem.cpp	2012-06-12 04:23:21 UTC (rev 47770)
@@ -41,7 +41,14 @@
 
 ExecutionSystem::ExecutionSystem(bNodeTree *editingtree, bool rendering)
 {
-	this->context.setbNodeTree(editingtree);
+	context.setbNodeTree(editingtree);
+	bNode* gnode;
+	for (gnode = (bNode*)editingtree->nodes.first ; gnode ; gnode = (bNode*)gnode->next) {
+		if (gnode->type == NODE_GROUP && gnode->typeinfo->group_edit_get(gnode)) {
+			context.setActivegNode(gnode);
+			break;
+		}
+	}
 
 	/* initialize the CompositorContext */
 	if (rendering) {
@@ -55,25 +62,25 @@
 
 	Node *mainOutputNode=NULL;
 
-	mainOutputNode = ExecutionSystemHelper::addbNodeTree(*this, 0, editingtree);
+	mainOutputNode = ExecutionSystemHelper::addbNodeTree(*this, 0, editingtree, NULL);
 
 	if (mainOutputNode) {
 		context.setScene((Scene*)mainOutputNode->getbNode()->id);
 		this->convertToOperations();
 		this->groupOperations(); /* group operations in ExecutionGroups */
-		vector<ExecutionGroup*> executionGroups;
-		this->findOutputExecutionGroup(&executionGroups);
 		unsigned int index;
 		unsigned int resolution[2];
-		for (index = 0 ; index < executionGroups.size(); index ++) {
+		for (index = 0 ; index < this->groups.size(); index ++) {
 			resolution[0]=0;
 			resolution[1]=0;
-			ExecutionGroup *executionGroup = executionGroups[index];
+			ExecutionGroup *executionGroup = groups[index];
 			executionGroup->determineResolution(resolution);
 		}
 	}
 
-	if (G.f & G_DEBUG) ExecutionSystemHelper::debugDump(this);
+#ifdef COM_DEBUG
+	ExecutionSystemHelper::debugDump(this);
+#endif
 }
 
 ExecutionSystem::~ExecutionSystem()
@@ -180,11 +187,13 @@
 					writeoperation->setbNodeTree(this->getContext().getbNodeTree());
 					this->addOperation(writeoperation);
 					ExecutionSystemHelper::addLink(this->getConnections(), fromsocket, writeoperation->getInputSocket(0));
+					writeoperation->readResolutionFromInputSocket();
 				}
 				ReadBufferOperation *readoperation = new ReadBufferOperation();
 				readoperation->setMemoryProxy(writeoperation->getMemoryProxy());
 				connection->setFromSocket(readoperation->getOutputSocket());
 				readoperation->getOutputSocket()->addConnection(connection);
+				readoperation->readResolutionFromWriteBuffer();
 				this->addOperation(readoperation);
 			}
 		}
@@ -207,9 +216,11 @@
 			readoperation->setMemoryProxy(writeOperation->getMemoryProxy());
 			connection->setFromSocket(readoperation->getOutputSocket());
 			readoperation->getOutputSocket()->addConnection(connection);
+			readoperation->readResolutionFromWriteBuffer();
 			this->addOperation(readoperation);
 		}
 		ExecutionSystemHelper::addLink(this->getConnections(), outputsocket, writeOperation->getInputSocket(0));
+		writeOperation->readResolutionFromInputSocket();
 	}
 }
 
@@ -237,13 +248,22 @@
 	// determine all resolutions of the operations (Width/Height)
 	for (index = 0 ; index < this->operations.size(); index ++) {
 		NodeOperation *operation = this->operations[index];
-		if (operation->isOutputOperation(context.isRendering())) {
+		if (operation->isOutputOperation(context.isRendering()) && !operation->isPreviewOperation()) {
 			unsigned int resolution[2] = {0,0};
 			unsigned int preferredResolution[2] = {0,0};
 			operation->determineResolution(resolution, preferredResolution);
 			operation->setResolution(resolution);
 		}
 	}
+	for (index = 0 ; index < this->operations.size(); index ++) {
+		NodeOperation *operation = this->operations[index];
+		if (operation->isOutputOperation(context.isRendering()) && operation->isPreviewOperation()) {
+			unsigned int resolution[2] = {0,0};
+			unsigned int preferredResolution[2] = {0,0};
+			operation->determineResolution(resolution, preferredResolution);
+			operation->setResolution(resolution);
+		}
+	}
 
 	// add convert resolution operations when needed.
 	for (index = 0 ; index < this->connections.size(); index ++) {

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.cpp	2012-06-12 04:23:21 UTC (rev 47770)
@@ -35,16 +35,20 @@
 #include "COM_GroupNode.h"
 #include "COM_WriteBufferOperation.h"
 #include "COM_ReadBufferOperation.h"
+#include "COM_ViewerBaseOperation.h"
 
-Node *ExecutionSystemHelper::addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree *tree)
+Node *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);
+		Node *execnode = addNode(nodes, node, isActiveGroup);
 		if (node->type == CMP_NODE_COMPOSITE) {
 			mainnode = execnode;
 		}
@@ -77,11 +81,12 @@
 	nodes.push_back(node);
 }
 
-Node *ExecutionSystemHelper::addNode(vector<Node*>& nodes, bNode *bNode)
+Node *ExecutionSystemHelper::addNode(vector<Node*>& nodes, bNode *bNode, bool inActiveGroup)
 {
 	Converter converter;
 	Node * node;
 	node = converter.convert(bNode);
+	node->setIsInActiveGroup(inActiveGroup);
 	if (node != NULL) {
 		addNode(nodes, node);
 		return node;
@@ -232,7 +237,12 @@
 			printf("|");
 		}
 		if (operation->isViewerOperation()) {
-			printf("Viewer");
+			ViewerBaseOperation * viewer = (ViewerBaseOperation*)operation;
+			if (viewer->isActiveViewerOutput()) {
+				printf("Active viewer");
+			} else {
+				printf("Viewer");
+			}
 		}
 		else if (operation->isOutputOperation(system->getContext().isRendering())) {
 			printf("Output");
@@ -249,6 +259,7 @@
 		else {
 			printf("O_%p", operation);
 		}
+		printf(" (%d,%d)", operation->getWidth(), operation->getHeight());
 		tot2 = operation->getNumberOfOutputSockets();
 		if (tot2 != 0) {
 			printf("|");

Modified: trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-06-11 23:16:41 UTC (rev 47769)
+++ trunk/blender/source/blender/compositor/intern/COM_ExecutionSystemHelper.h	2012-06-12 04:23:21 UTC (rev 47770)
@@ -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);
+	static Node *addbNodeTree(ExecutionSystem &system, int nodes_start, bNodeTree* tree, bNode *groupnode);
 	
 	/**

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list