diff options
3 files changed, 24 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]; diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h index d0bfe3c1311..baf3a0878b9 100644 --- a/source/blender/compositor/intern/COM_NodeOperation.h +++ b/source/blender/compositor/intern/COM_NodeOperation.h @@ -44,6 +44,13 @@ class NodeOperation; typedef NodeOperation SocketReader; /** + * RESOLUTION_INPUT_ANY is a wildcard when any resolution of an input can be used. + * This solves the issue that the FileInputNode in a group node cannot find the + * correct resolution. + */ +static constexpr unsigned int RESOLUTION_INPUT_ANY = 999999; + +/** * \brief Resize modes of inputsockets * How are the input and working resolutions matched * \ingroup Model diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.cc b/source/blender/compositor/operations/COM_OutputFileOperation.cc index 5184cd42b9e..1ee749b1a49 100644 --- a/source/blender/compositor/operations/COM_OutputFileOperation.cc +++ b/source/blender/compositor/operations/COM_OutputFileOperation.cc @@ -323,6 +323,7 @@ OutputOpenExrMultiLayerOperation::OutputOpenExrMultiLayerOperation(const Scene * this->m_exr_codec = exr_codec; this->m_exr_half_float = exr_half_float; this->m_viewName = viewName; + this->setResolutionInputSocketIndex(RESOLUTION_INPUT_ANY); } void OutputOpenExrMultiLayerOperation::add_layer(const char *name, |