forked from bartvdbraak/blender
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.
This commit is contained in:
parent
a1c9241797
commit
8ac1d8a4ea
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user