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-12-24 17:33:47 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-12-24 17:33:47 +0400
commit8ac1d8a4eafe4988ae6c6049bb0ebd40381e46ae (patch)
tree38c7d8e0385de1099071af0f903b26299a0af190 /source/blender/compositor
parenta1c9241797b003979c1da747e217e875c497c775 (diff)
Fix #33650: Compositor locks up when input is an unrendered render layer.
Issue was caused by resolution detecting which assumed zero resolution is undefined one and should be re-evaluated. It doesn't work in cases when there's a missing input, causing lots of unneeded resolution re-calculation. It wasn't so much issue in average sized node trees, but it was a real problem in generated tree from the report. Currently used pretty simple solution which added a boolean flag to the node operation which signal whether resolution was ever set or not. There're probably smarter solutions here but can not think about them.
Diffstat (limited to 'source/blender/compositor')
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.cpp1
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.h8
2 files changed, 6 insertions, 3 deletions
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cpp b/source/blender/compositor/intern/COM_NodeOperation.cpp
index a05c37e1b09..d33b8085022 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cpp
+++ b/source/blender/compositor/intern/COM_NodeOperation.cpp
@@ -34,6 +34,7 @@ NodeOperation::NodeOperation() : NodeBase()
this->m_complex = false;
this->m_width = 0;
this->m_height = 0;
+ this->m_isResolutionSet = false;
this->m_openCL = false;
this->m_btree = NULL;
}
diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h
index f856d8e6a11..60ffadf60f7 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.h
+++ b/source/blender/compositor/intern/COM_NodeOperation.h
@@ -81,6 +81,7 @@ private:
*/
const bNodeTree *m_btree;
+ bool m_isResolutionSet;
public:
/**
* @brief is this node an operation?
@@ -170,7 +171,7 @@ public:
virtual void deinitExecution();
bool isResolutionSet() {
- return this->m_width != 0 && this->m_height != 0;
+ return this->m_isResolutionSet;
}
/**
@@ -181,6 +182,7 @@ public:
if (!isResolutionSet()) {
this->m_width = resolution[0];
this->m_height = resolution[1];
+ this->m_isResolutionSet = true;
}
}
@@ -254,8 +256,8 @@ public:
protected:
NodeOperation();
- void setWidth(unsigned int width) { this->m_width = width; }
- void setHeight(unsigned int height) { this->m_height = height; }
+ void setWidth(unsigned int width) { this->m_width = width; this->m_isResolutionSet = true; }
+ void setHeight(unsigned int height) { this->m_height = height; this->m_isResolutionSet = true; }
SocketReader *getInputSocketReader(unsigned int inputSocketindex);
NodeOperation *getInputOperation(unsigned int inputSocketindex);