[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49450] trunk/blender/source/blender: Tie compositor will now update render result when changing node setup

Sergey Sharybin sergey.vfx at gmail.com
Wed Aug 1 15:59:09 CEST 2012


Revision: 49450
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49450
Author:   nazgul
Date:     2012-08-01 13:59:08 +0000 (Wed, 01 Aug 2012)
Log Message:
-----------
Tie compositor will now update render result when changing node setup

Issue was caused by the way how render result was acquiring -- pointer
to render data was used to find needed render descriptor. It's not
reliable since render contains copy of scene's render data, not pointer
to this data.

Use node scene's id name for render result acquiring, the same way
as it was done in old compositor system.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_CompositorNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/compositor/nodes/COM_CompositorNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_CompositorNode.cpp	2012-08-01 13:34:20 UTC (rev 49449)
+++ trunk/blender/source/blender/compositor/nodes/COM_CompositorNode.cpp	2012-08-01 13:59:08 UTC (rev 49450)
@@ -31,11 +31,14 @@
 
 void CompositorNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
 {
+	bNode *editorNode = this->getbNode();
+
 	InputSocket *imageSocket = this->getInputSocket(0);
 	InputSocket *alphaSocket = this->getInputSocket(1);
 	InputSocket *depthSocket = this->getInputSocket(2);
 
 	CompositorOperation *compositorOperation = new CompositorOperation();
+	compositorOperation->setScene((Scene *) editorNode->id);
 	compositorOperation->setRenderData(context->getRenderData());
 	compositorOperation->setbNodeTree(context->getbNodeTree());
 	imageSocket->relinkConnections(compositorOperation->getInputSocket(0), 0, graph);

Modified: trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp	2012-08-01 13:34:20 UTC (rev 49449)
+++ trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.cpp	2012-08-01 13:59:08 UTC (rev 49450)
@@ -68,8 +68,7 @@
 void CompositorOperation::deinitExecution()
 {
 	if (!isBreaked()) {
-		const RenderData *rd = this->m_rd;
-		Render *re = RE_GetRender_FromData(rd);
+		Render *re = RE_GetRender(this->m_scene->id.name);
 		RenderResult *rr = RE_AcquireResultWrite(re);
 
 		if (rr) {
@@ -165,7 +164,7 @@
 
 	// check actual render resolution with cropping it may differ with cropped border.rendering
 	// FIX for: [31777] Border Crop gives black (easy)
-	Render *re = RE_GetRender_FromData(this->m_rd);
+	Render *re = RE_GetRender(this->m_scene->id.name);
 	if (re) {
 		RenderResult *rr = RE_AcquireResultRead(re);
 		if (rr) {

Modified: trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h	2012-08-01 13:34:20 UTC (rev 49449)
+++ trunk/blender/source/blender/compositor/operations/COM_CompositorOperation.h	2012-08-01 13:59:08 UTC (rev 49450)
@@ -31,6 +31,8 @@
  */
 class CompositorOperation : public NodeOperation {
 private:
+	const Scene *m_scene;
+
 	/**
 	 * @brief local reference to the scene
 	 */
@@ -63,6 +65,7 @@
 public:
 	CompositorOperation();
 	void executeRegion(rcti *rect, unsigned int tileNumber);
+	void setScene(const Scene *scene) { this->m_scene = scene; }
 	void setRenderData(const RenderData *rd) { this->m_rd = rd; }
 	bool isOutputOperation(bool rendering) const { return true; }
 	void initExecution();

Modified: trunk/blender/source/blender/render/extern/include/RE_pipeline.h
===================================================================
--- trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2012-08-01 13:34:20 UTC (rev 49449)
+++ trunk/blender/source/blender/render/extern/include/RE_pipeline.h	2012-08-01 13:59:08 UTC (rev 49450)
@@ -153,7 +153,6 @@
 /* calling a new render with same name, frees automatic existing render */
 struct Render *RE_NewRender (const char *name);
 struct Render *RE_GetRender(const char *name);
-struct Render *RE_GetRender_FromData(const struct RenderData *rd);
 
 /* returns 1 while render is working (or renders called from within render) */
 int RE_RenderInProgress(struct Render *re);

Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
===================================================================
--- trunk/blender/source/blender/render/intern/source/pipeline.c	2012-08-01 13:34:20 UTC (rev 49449)
+++ trunk/blender/source/blender/render/intern/source/pipeline.c	2012-08-01 13:59:08 UTC (rev 49450)
@@ -245,18 +245,6 @@
 	return re;
 }
 
-Render *RE_GetRender_FromData(const RenderData *rd)
-{
-	Render *re;
-
-	/* search for existing renders */
-	for (re = RenderGlobal.renderlist.first; re; re = re->next)
-		if (&re->r == rd)
-			break;
-
-	return re;
-}
-
 /* if you want to know exactly what has been done */
 RenderResult *RE_AcquireResultRead(Render *re)
 {




More information about the Bf-blender-cvs mailing list