diff options
3 files changed, 27 insertions, 3 deletions
diff --git a/source/blender/compositor/intern/COM_ExecutionGroup.cpp b/source/blender/compositor/intern/COM_ExecutionGroup.cpp index 7c454445e4f..e82bf2e21c8 100644 --- a/source/blender/compositor/intern/COM_ExecutionGroup.cpp +++ b/source/blender/compositor/intern/COM_ExecutionGroup.cpp @@ -638,8 +638,27 @@ void ExecutionGroup::setRenderBorder(float xmin, float xmax, float ymin, float y { NodeOperation *operation = this->getOutputNodeOperation(); - if (operation->isOutputOperation(true) && !(operation->isViewerOperation() || operation->isPreviewOperation())) { - BLI_rcti_init(&this->m_viewerBorder, xmin * this->m_width, xmax * this->m_width, - ymin * this->m_height, ymax * this->m_height); + if (operation->isOutputOperation(true)) { + /* Basically, setting border need to happen for only operatoins + * which operates in render resolution buffers (like compositor + * output nodes). + * + * In this cases adding border will lead to mapping coordinates + * from output buffer space to input buffer spaces when executing + * operation. + * + * But nodes like viewer and file output just shall display or + * safe the same exact buffer which goes to their input, no need + * in any kind of coordinates mapping. + */ + + bool operationNeedsBorder = !(operation->isViewerOperation() || + operation->isPreviewOperation() || + operation->isFileOutputOperation()); + + if (operationNeedsBorder) { + BLI_rcti_init(&this->m_viewerBorder, xmin * this->m_width, xmax * this->m_width, + ymin * this->m_height, ymax * this->m_height); + } } } diff --git a/source/blender/compositor/intern/COM_NodeOperation.h b/source/blender/compositor/intern/COM_NodeOperation.h index 26a382929cb..114a00b9e8d 100644 --- a/source/blender/compositor/intern/COM_NodeOperation.h +++ b/source/blender/compositor/intern/COM_NodeOperation.h @@ -247,6 +247,7 @@ public: virtual bool isViewerOperation() { return false; } virtual bool isPreviewOperation() { return false; } + virtual bool isFileOutputOperation() { return false; } inline bool isBreaked() { return this->m_btree->test_break(this->m_btree->tbh); diff --git a/source/blender/compositor/operations/COM_OutputFileOperation.h b/source/blender/compositor/operations/COM_OutputFileOperation.h index 69d1ad48ced..ada40bba014 100644 --- a/source/blender/compositor/operations/COM_OutputFileOperation.h +++ b/source/blender/compositor/operations/COM_OutputFileOperation.h @@ -56,6 +56,8 @@ public: void initExecution(); void deinitExecution(); const CompositorPriority getRenderPriority() const { return COM_PRIORITY_LOW; } + + bool isFileOutputOperation() { return true; } }; /* extra info for OpenEXR layers */ @@ -90,6 +92,8 @@ public: void initExecution(); void deinitExecution(); const CompositorPriority getRenderPriority() const { return COM_PRIORITY_LOW; } + + bool isFileOutputOperation() { return true; } }; #endif |