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:
authorJeroen Bakker <jeroen@blender.org>2021-04-12 10:44:37 +0300
committerJeroen Bakker <jeroen@blender.org>2021-04-12 10:50:04 +0300
commit71cb0bdc43368c5041daac5565697b36d54d5186 (patch)
tree085977dee9c9e38955ce3cb4b42f79b97ea0b386 /source/blender/compositor/intern/COM_NodeOperation.cc
parent75642b4cfd654b97e8096b97add58c4afa218413 (diff)
Fix: File output uses incorrect resolution when first socket unused.
File output node always received the resolution from the first socket. When that socket didn't had a link it would use a resolution of 0,0. What lead to not saving the file at all. This only effected Multi layer OpenEXR files. This change would go over all the links to find the first valid resolution.
Diffstat (limited to 'source/blender/compositor/intern/COM_NodeOperation.cc')
-rw-r--r--source/blender/compositor/intern/COM_NodeOperation.cc18
1 files changed, 16 insertions, 2 deletions
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc
index 35e7f1adc7d..0bb8e0ef674 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cc
+++ b/source/blender/compositor/intern/COM_NodeOperation.cc
@@ -62,15 +62,29 @@ void NodeOperation::addOutputSocket(DataType datatype)
void NodeOperation::determineResolution(unsigned int resolution[2],
unsigned int preferredResolution[2])
{
- if (m_resolutionInputSocketIndex < m_inputs.size()) {
+ unsigned int used_resolution_index = 0;
+ if (m_resolutionInputSocketIndex == RESOLUTION_INPUT_ANY) {
+ for (NodeOperationInput &input : m_inputs) {
+ unsigned int any_resolution[2] = {0, 0};
+ input.determineResolution(any_resolution, preferredResolution);
+ if (any_resolution[0] * any_resolution[1] > 0) {
+ resolution[0] = any_resolution[0];
+ resolution[1] = any_resolution[1];
+ break;
+ }
+ used_resolution_index += 1;
+ }
+ }
+ else if (m_resolutionInputSocketIndex < m_inputs.size()) {
NodeOperationInput &input = m_inputs[m_resolutionInputSocketIndex];
input.determineResolution(resolution, preferredResolution);
+ used_resolution_index = m_resolutionInputSocketIndex;
}
unsigned int temp2[2] = {resolution[0], resolution[1]};
unsigned int temp[2];
for (unsigned int index = 0; index < m_inputs.size(); index++) {
- if (index == this->m_resolutionInputSocketIndex) {
+ if (index == used_resolution_index) {
continue;
}
NodeOperationInput &input = m_inputs[index];