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:
authorManuel Castilla <manzanilla>2021-03-23 14:04:34 +0300
committerJeroen Bakker <jeroen@blender.org>2021-03-23 14:04:51 +0300
commit9fb5559a0fb55d8b009d0df38323798be6647a44 (patch)
treea87eb3b49fa21025cb13629075ee3752a0eb305d /source/blender/compositor/operations/COM_PreviewOperation.cc
parent8cac85abfe41fdbe8286a73b94a143390a52e61c (diff)
Compositor: Display generated inputs in Viewers and Previews
Currently viewers and previews only display node trees that have at least one node with fixed resolution size. When all inputs are generated, nothing is displayed in most cases (RGB Node is displayed as a single pixel on previews). By generated I mean inputs not having resolution on their own, they create content dynamically given an output resolution. This patch adds support for those cases by using an appropriate preferred resolution on Viewers/Previews which propagates to generated inputs as output resolution. Now: - Viewers will display generated inputs with scene render resolution. - Previews will display them with scene aspect ratio. This is consistent with final render result and respects relative space. The benefit for the user is being able to compose images without any input source. For example for creating mask images or simple backgrounds. Reviewed By: Jeroen Bakker Differential Revision: https://developer.blender.org/D10611
Diffstat (limited to 'source/blender/compositor/operations/COM_PreviewOperation.cc')
-rw-r--r--source/blender/compositor/operations/COM_PreviewOperation.cc41
1 files changed, 24 insertions, 17 deletions
diff --git a/source/blender/compositor/operations/COM_PreviewOperation.cc b/source/blender/compositor/operations/COM_PreviewOperation.cc
index eedf561717a..6d1199ab118 100644
--- a/source/blender/compositor/operations/COM_PreviewOperation.cc
+++ b/source/blender/compositor/operations/COM_PreviewOperation.cc
@@ -34,7 +34,9 @@
#include "IMB_imbuf_types.h"
PreviewOperation::PreviewOperation(const ColorManagedViewSettings *viewSettings,
- const ColorManagedDisplaySettings *displaySettings)
+ const ColorManagedDisplaySettings *displaySettings,
+ const unsigned int defaultWidth,
+ const unsigned int defaultHeight)
{
this->addInputSocket(DataType::Color, COM_SC_NO_RESIZE);
@@ -44,6 +46,8 @@ PreviewOperation::PreviewOperation(const ColorManagedViewSettings *viewSettings,
this->m_divider = 1.0f;
this->m_viewSettings = viewSettings;
this->m_displaySettings = displaySettings;
+ this->m_defaultWidth = defaultWidth;
+ this->m_defaultHeight = defaultHeight;
}
void PreviewOperation::verifyPreview(bNodeInstanceHash *previews, bNodeInstanceKey key)
@@ -123,30 +127,33 @@ bool PreviewOperation::determineDependingAreaOfInterest(rcti *input,
return NodeOperation::determineDependingAreaOfInterest(&newInput, readOperation, output);
}
void PreviewOperation::determineResolution(unsigned int resolution[2],
- unsigned int preferredResolution[2])
+ unsigned int /*preferredResolution*/[2])
{
- NodeOperation::determineResolution(resolution, preferredResolution);
+ /* Use default preview resolution as preferred ensuring it has size so that
+ * generated inputs (which don't have resolution on their own) are displayed */
+ BLI_assert(this->m_defaultWidth > 0 && this->m_defaultHeight > 0);
+ unsigned int previewPreferredRes[2] = {this->m_defaultWidth, this->m_defaultHeight};
+ NodeOperation::determineResolution(resolution, previewPreferredRes);
/* If resolution is 0 there are two possible scenarios:
* - Either node is not connected at all
- * - It is connected to input which doesn't have own resolution (i.e. color input).
+ * - Or it is connected to an input which has no resolution.
*
* In the former case we rely on the execution system to not evaluate this node.
*
- * For the latter case we use 1 pixel preview, so that it's possible to see preview color in the
- * preview. This is how final F12 render will behave (flood-fill final frame with the color).
- *
- * Having things consistent in terms that node preview is scaled down F12 render is a very
- * natural thing to do. */
- int width = max_ii(1, resolution[0]);
- int height = max_ii(1, resolution[1]);
-
+ * The latter case would only happen if an input doesn't set any resolution ignoring output
+ * preferred resolution. In such case preview size will be 0 too.
+ */
+ int width = resolution[0];
+ int height = resolution[1];
this->m_divider = 0.0f;
- if (width > height) {
- this->m_divider = (float)COM_PREVIEW_SIZE / (width);
- }
- else {
- this->m_divider = (float)COM_PREVIEW_SIZE / (height);
+ if (width > 0 && height > 0) {
+ if (width > height) {
+ this->m_divider = (float)COM_PREVIEW_SIZE / (width);
+ }
+ else {
+ this->m_divider = (float)COM_PREVIEW_SIZE / (height);
+ }
}
width = width * this->m_divider;
height = height * this->m_divider;