Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-08-01 17:59:08 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-08-01 17:59:08 +0400
commit8a1a4a453dd3cca0319ca88dbab271089d178c20 (patch)
tree7510330834c0338388bd1923349c909b67a7e8cc /source/blender
parentdd6d78840026e493045b441723e60546abdeefb6 (diff)
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.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/compositor/nodes/COM_CompositorNode.cpp3
-rw-r--r--source/blender/compositor/operations/COM_CompositorOperation.cpp5
-rw-r--r--source/blender/compositor/operations/COM_CompositorOperation.h3
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h1
-rw-r--r--source/blender/render/intern/source/pipeline.c12
5 files changed, 8 insertions, 16 deletions
diff --git a/source/blender/compositor/nodes/COM_CompositorNode.cpp b/source/blender/compositor/nodes/COM_CompositorNode.cpp
index 8a84908f478..338741ebe79 100644
--- a/source/blender/compositor/nodes/COM_CompositorNode.cpp
+++ b/source/blender/compositor/nodes/COM_CompositorNode.cpp
@@ -31,11 +31,14 @@ CompositorNode::CompositorNode(bNode *editorNode) : Node(editorNode)
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);
diff --git a/source/blender/compositor/operations/COM_CompositorOperation.cpp b/source/blender/compositor/operations/COM_CompositorOperation.cpp
index 57a4639ecba..600ee5e1d7e 100644
--- a/source/blender/compositor/operations/COM_CompositorOperation.cpp
+++ b/source/blender/compositor/operations/COM_CompositorOperation.cpp
@@ -68,8 +68,7 @@ void CompositorOperation::initExecution()
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 @@ void CompositorOperation::determineResolution(unsigned int resolution[], unsigne
// 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) {
diff --git a/source/blender/compositor/operations/COM_CompositorOperation.h b/source/blender/compositor/operations/COM_CompositorOperation.h
index 491fe3eb4e4..51a31105d5c 100644
--- a/source/blender/compositor/operations/COM_CompositorOperation.h
+++ b/source/blender/compositor/operations/COM_CompositorOperation.h
@@ -31,6 +31,8 @@
*/
class CompositorOperation : public NodeOperation {
private:
+ const Scene *m_scene;
+
/**
* @brief local reference to the scene
*/
@@ -63,6 +65,7 @@ private:
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();
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 8ca229c1a1b..d474dc14df8 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -153,7 +153,6 @@ typedef struct RenderStats {
/* 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);
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 77f75caa36a..ac4788465e5 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -245,18 +245,6 @@ Render *RE_GetRender(const char *name)
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)
{