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:
m---------release/datafiles/locale0
m---------release/scripts/addons0
-rw-r--r--source/blender/compositor/intern/COM_NodeOperationBuilder.cc4
-rw-r--r--source/blender/compositor/operations/COM_PreviewOperation.cc41
-rw-r--r--source/blender/compositor/operations/COM_PreviewOperation.h6
-rw-r--r--source/blender/compositor/operations/COM_ViewerOperation.cc11
-rw-r--r--source/blender/compositor/operations/COM_ViewerOperation.h1
7 files changed, 44 insertions, 19 deletions
diff --git a/release/datafiles/locale b/release/datafiles/locale
-Subproject ef74c1b861a1b05c2483a2c045a638070416749
+Subproject 2cef4877edc40875978c4e95322bb5193f5815b
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject 6dfba915743b67aff99ddcc19c0807d339a87c9
+Subproject bcd08a9506d33bdd7358201031b04d041ef22d9
diff --git a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
index 818f2e4bcf6..1c741283c7b 100644
--- a/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
+++ b/source/blender/compositor/intern/COM_NodeOperationBuilder.cc
@@ -195,7 +195,9 @@ PreviewOperation *NodeOperationBuilder::make_preview_operation() const
bNodeInstanceHash *previews = m_context->getPreviewHash();
if (previews) {
PreviewOperation *operation = new PreviewOperation(m_context->getViewSettings(),
- m_context->getDisplaySettings());
+ m_context->getDisplaySettings(),
+ m_current_node->getbNode()->preview_xsize,
+ m_current_node->getbNode()->preview_ysize);
operation->setbNodeTree(m_context->getbNodeTree());
operation->verifyPreview(previews, m_current_node->getInstanceKey());
return operation;
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;
diff --git a/source/blender/compositor/operations/COM_PreviewOperation.h b/source/blender/compositor/operations/COM_PreviewOperation.h
index eca50c5cda4..03ae6a6c42e 100644
--- a/source/blender/compositor/operations/COM_PreviewOperation.h
+++ b/source/blender/compositor/operations/COM_PreviewOperation.h
@@ -34,13 +34,17 @@ class PreviewOperation : public NodeOperation {
bNodePreview *m_preview;
SocketReader *m_input;
float m_divider;
+ unsigned int m_defaultWidth;
+ unsigned int m_defaultHeight;
const ColorManagedViewSettings *m_viewSettings;
const ColorManagedDisplaySettings *m_displaySettings;
public:
PreviewOperation(const ColorManagedViewSettings *viewSettings,
- const ColorManagedDisplaySettings *displaySettings);
+ const ColorManagedDisplaySettings *displaySettings,
+ unsigned int defaultWidth,
+ unsigned int defaultHeight);
void verifyPreview(bNodeInstanceHash *previews, bNodeInstanceKey key);
bool isOutputOperation(bool /*rendering*/) const
diff --git a/source/blender/compositor/operations/COM_ViewerOperation.cc b/source/blender/compositor/operations/COM_ViewerOperation.cc
index e31f7ad8eba..ea5937d8afb 100644
--- a/source/blender/compositor/operations/COM_ViewerOperation.cc
+++ b/source/blender/compositor/operations/COM_ViewerOperation.cc
@@ -118,6 +118,17 @@ void ViewerOperation::executeRegion(rcti *rect, unsigned int /*tileNumber*/)
updateImage(rect);
}
+void ViewerOperation::determineResolution(unsigned int resolution[2],
+ unsigned int /*preferredResolution*/[2])
+{
+ const int sceneRenderWidth = this->m_rd->xsch * this->m_rd->size / 100;
+ const int sceneRenderHeight = this->m_rd->ysch * this->m_rd->size / 100;
+
+ unsigned int localPrefRes[2] = {static_cast<unsigned int>(sceneRenderWidth),
+ static_cast<unsigned int>(sceneRenderHeight)};
+ NodeOperation::determineResolution(resolution, localPrefRes);
+}
+
void ViewerOperation::initImage()
{
Image *ima = this->m_image;
diff --git a/source/blender/compositor/operations/COM_ViewerOperation.h b/source/blender/compositor/operations/COM_ViewerOperation.h
index b4a7fbb4f4b..513c6eae487 100644
--- a/source/blender/compositor/operations/COM_ViewerOperation.h
+++ b/source/blender/compositor/operations/COM_ViewerOperation.h
@@ -51,6 +51,7 @@ class ViewerOperation : public NodeOperation {
void initExecution();
void deinitExecution();
void executeRegion(rcti *rect, unsigned int tileNumber);
+ void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
bool isOutputOperation(bool /*rendering*/) const
{
if (G.background) {