[Bf-blender-cvs] [e8f41f1b939] compositor-full-frame: Compositor: Replace resolution concept by canvas

Manuel Castilla noreply at git.blender.org
Fri Aug 27 00:50:35 CEST 2021


Commit: e8f41f1b9399471d83f99914c9a2c5074dc0beb3
Author: Manuel Castilla
Date:   Thu Aug 26 18:49:40 2021 +0200
Branches: compositor-full-frame
https://developer.blender.org/rBe8f41f1b9399471d83f99914c9a2c5074dc0beb3

Compositor: Replace resolution concept by canvas

This is a code refactor in preparation of supporting canvas
compositing and fix all cropping issues on full frame implementation.

No functional changes, all canvases are at (0, 0) position matching
tiled implementation.

===================================================================

M	source/blender/compositor/COM_defines.h
M	source/blender/compositor/intern/COM_BufferOperation.cc
M	source/blender/compositor/intern/COM_Converter.cc
M	source/blender/compositor/intern/COM_Converter.h
M	source/blender/compositor/intern/COM_Debug.cc
M	source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
M	source/blender/compositor/intern/COM_NodeOperation.cc
M	source/blender/compositor/intern/COM_NodeOperation.h
M	source/blender/compositor/intern/COM_NodeOperationBuilder.cc
M	source/blender/compositor/intern/COM_NodeOperationBuilder.h
M	source/blender/compositor/nodes/COM_AlphaOverNode.cc
M	source/blender/compositor/nodes/COM_CombineColorNode.cc
M	source/blender/compositor/nodes/COM_GlareNode.cc
M	source/blender/compositor/nodes/COM_HueSaturationValueCorrectNode.cc
M	source/blender/compositor/nodes/COM_HueSaturationValueNode.cc
M	source/blender/compositor/nodes/COM_MapUVNode.cc
M	source/blender/compositor/nodes/COM_SetAlphaNode.cc
M	source/blender/compositor/nodes/COM_ViewerNode.cc
M	source/blender/compositor/operations/COM_BlurBaseOperation.cc
M	source/blender/compositor/operations/COM_BlurBaseOperation.h
M	source/blender/compositor/operations/COM_BokehBlurOperation.cc
M	source/blender/compositor/operations/COM_BokehBlurOperation.h
M	source/blender/compositor/operations/COM_BokehImageOperation.cc
M	source/blender/compositor/operations/COM_BokehImageOperation.h
M	source/blender/compositor/operations/COM_CalculateMeanOperation.cc
M	source/blender/compositor/operations/COM_ColorBalanceASCCDLOperation.cc
M	source/blender/compositor/operations/COM_ColorBalanceLGGOperation.cc
M	source/blender/compositor/operations/COM_ColorCurveOperation.cc
M	source/blender/compositor/operations/COM_CompositorOperation.cc
M	source/blender/compositor/operations/COM_CompositorOperation.h
M	source/blender/compositor/operations/COM_ConstantOperation.cc
M	source/blender/compositor/operations/COM_ConstantOperation.h
M	source/blender/compositor/operations/COM_ConvertOperation.cc
M	source/blender/compositor/operations/COM_ConvolutionFilterOperation.cc
M	source/blender/compositor/operations/COM_CropOperation.cc
M	source/blender/compositor/operations/COM_CropOperation.h
M	source/blender/compositor/operations/COM_DenoiseOperation.cc
M	source/blender/compositor/operations/COM_DespeckleOperation.cc
M	source/blender/compositor/operations/COM_DirectionalBlurOperation.cc
M	source/blender/compositor/operations/COM_DisplaceOperation.cc
M	source/blender/compositor/operations/COM_DisplaceSimpleOperation.cc
M	source/blender/compositor/operations/COM_DotproductOperation.cc
M	source/blender/compositor/operations/COM_DoubleEdgeMaskOperation.cc
M	source/blender/compositor/operations/COM_FastGaussianBlurOperation.cc
M	source/blender/compositor/operations/COM_FlipOperation.cc
M	source/blender/compositor/operations/COM_GlareBaseOperation.cc
M	source/blender/compositor/operations/COM_GlareThresholdOperation.cc
M	source/blender/compositor/operations/COM_GlareThresholdOperation.h
M	source/blender/compositor/operations/COM_ImageOperation.cc
M	source/blender/compositor/operations/COM_ImageOperation.h
M	source/blender/compositor/operations/COM_InpaintOperation.cc
M	source/blender/compositor/operations/COM_InvertOperation.cc
M	source/blender/compositor/operations/COM_KeyingScreenOperation.cc
M	source/blender/compositor/operations/COM_KeyingScreenOperation.h
M	source/blender/compositor/operations/COM_MapUVOperation.cc
M	source/blender/compositor/operations/COM_MapUVOperation.h
M	source/blender/compositor/operations/COM_MaskOperation.cc
M	source/blender/compositor/operations/COM_MaskOperation.h
M	source/blender/compositor/operations/COM_MathBaseOperation.cc
M	source/blender/compositor/operations/COM_MathBaseOperation.h
M	source/blender/compositor/operations/COM_MixOperation.cc
M	source/blender/compositor/operations/COM_MixOperation.h
M	source/blender/compositor/operations/COM_MovieClipAttributeOperation.cc
M	source/blender/compositor/operations/COM_MovieClipAttributeOperation.h
M	source/blender/compositor/operations/COM_MovieClipOperation.cc
M	source/blender/compositor/operations/COM_MovieClipOperation.h
M	source/blender/compositor/operations/COM_MovieDistortionOperation.cc
M	source/blender/compositor/operations/COM_NormalizeOperation.cc
M	source/blender/compositor/operations/COM_OutputFileOperation.cc
M	source/blender/compositor/operations/COM_PixelateOperation.cc
M	source/blender/compositor/operations/COM_PlaneCornerPinOperation.cc
M	source/blender/compositor/operations/COM_PlaneCornerPinOperation.h
M	source/blender/compositor/operations/COM_PlaneDistortCommonOperation.cc
M	source/blender/compositor/operations/COM_PlaneTrackOperation.cc
M	source/blender/compositor/operations/COM_PlaneTrackOperation.h
M	source/blender/compositor/operations/COM_PreviewOperation.cc
M	source/blender/compositor/operations/COM_PreviewOperation.h
M	source/blender/compositor/operations/COM_ReadBufferOperation.cc
M	source/blender/compositor/operations/COM_ReadBufferOperation.h
M	source/blender/compositor/operations/COM_RenderLayersProg.cc
M	source/blender/compositor/operations/COM_RenderLayersProg.h
M	source/blender/compositor/operations/COM_RotateOperation.cc
M	source/blender/compositor/operations/COM_ScaleOperation.cc
M	source/blender/compositor/operations/COM_ScaleOperation.h
M	source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cc
M	source/blender/compositor/operations/COM_SetColorOperation.cc
M	source/blender/compositor/operations/COM_SetColorOperation.h
M	source/blender/compositor/operations/COM_SetValueOperation.cc
M	source/blender/compositor/operations/COM_SetValueOperation.h
M	source/blender/compositor/operations/COM_SetVectorOperation.cc
M	source/blender/compositor/operations/COM_SetVectorOperation.h
M	source/blender/compositor/operations/COM_SplitOperation.cc
M	source/blender/compositor/operations/COM_SplitOperation.h
M	source/blender/compositor/operations/COM_SunBeamsOperation.cc
M	source/blender/compositor/operations/COM_TextureOperation.cc
M	source/blender/compositor/operations/COM_TextureOperation.h
M	source/blender/compositor/operations/COM_TonemapOperation.cc
M	source/blender/compositor/operations/COM_TrackPositionOperation.cc
M	source/blender/compositor/operations/COM_TrackPositionOperation.h
M	source/blender/compositor/operations/COM_TranslateOperation.cc
M	source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.cc
M	source/blender/compositor/operations/COM_VariableSizeBokehBlurOperation.h
M	source/blender/compositor/operations/COM_VectorBlurOperation.cc
M	source/blender/compositor/operations/COM_ViewerOperation.cc
M	source/blender/compositor/operations/COM_ViewerOperation.h
M	source/blender/compositor/operations/COM_WrapOperation.cc
M	source/blender/compositor/operations/COM_WriteBufferOperation.cc
M	source/blender/compositor/operations/COM_WriteBufferOperation.h

===================================================================

diff --git a/source/blender/compositor/COM_defines.h b/source/blender/compositor/COM_defines.h
index 0c477eb2584..b518ccab7c7 100644
--- a/source/blender/compositor/COM_defines.h
+++ b/source/blender/compositor/COM_defines.h
@@ -121,7 +121,8 @@ constexpr float COM_PREVIEW_SIZE = 140.f;
 constexpr float COM_RULE_OF_THIRDS_DIVIDER = 100.0f;
 constexpr float COM_BLUR_BOKEH_PIXELS = 512;
 
-constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST = {0, 0, 0, 0};
+constexpr rcti COM_AREA_NONE = {0, 0, 0, 0};
+constexpr rcti COM_CONSTANT_INPUT_AREA_OF_INTEREST = COM_AREA_NONE;
 
 constexpr IndexRange XRange(const rcti &area)
 {
diff --git a/source/blender/compositor/intern/COM_BufferOperation.cc b/source/blender/compositor/intern/COM_BufferOperation.cc
index cafdff89c8e..c6530cf6bd1 100644
--- a/source/blender/compositor/intern/COM_BufferOperation.cc
+++ b/source/blender/compositor/intern/COM_BufferOperation.cc
@@ -24,12 +24,7 @@ BufferOperation::BufferOperation(MemoryBuffer *buffer, DataType data_type)
 {
   buffer_ = buffer;
   inflated_buffer_ = nullptr;
-  /* TODO: Implement a MemoryBuffer get_size() method returning a Size2d type. Shorten following
-   * code to: set_resolution(buffer.get_size()) */
-  unsigned int resolution[2];
-  resolution[0] = buffer->getWidth();
-  resolution[1] = buffer->getHeight();
-  setResolution(resolution);
+  set_canvas(buffer->get_rect());
   addOutputSocket(data_type);
   flags.is_constant_operation = buffer_->is_a_single_elem();
   flags.is_fullframe_operation = false;
diff --git a/source/blender/compositor/intern/COM_Converter.cc b/source/blender/compositor/intern/COM_Converter.cc
index 1983eb190e2..2958e494b55 100644
--- a/source/blender/compositor/intern/COM_Converter.cc
+++ b/source/blender/compositor/intern/COM_Converter.cc
@@ -456,9 +456,9 @@ NodeOperation *COM_convert_data_type(const NodeOperationOutput &from, const Node
   return nullptr;
 }
 
-void COM_convert_resolution(NodeOperationBuilder &builder,
-                            NodeOperationOutput *fromSocket,
-                            NodeOperationInput *toSocket)
+void COM_convert_canvas(NodeOperationBuilder &builder,
+                        NodeOperationOutput *fromSocket,
+                        NodeOperationInput *toSocket)
 {
   /* Data type conversions are executed before resolutions to ensure convert operations have
    * resolution. This method have to ensure same datatypes are linked for new operations. */
@@ -531,10 +531,10 @@ void COM_convert_resolution(NodeOperationBuilder &builder,
       builder.addOperation(sxop);
       builder.addOperation(syop);
 
-      unsigned int resolution[2] = {fromOperation->getWidth(), fromOperation->getHeight()};
-      scaleOperation->setResolution(resolution);
-      sxop->setResolution(resolution);
-      syop->setResolution(resolution);
+      const rcti &scale_canvas = fromOperation->get_canvas();
+      scaleOperation->set_canvas(scale_canvas);
+      sxop->set_canvas(scale_canvas);
+      syop->set_canvas(scale_canvas);
       builder.addOperation(scaleOperation);
     }
 
@@ -553,10 +553,10 @@ void COM_convert_resolution(NodeOperationBuilder &builder,
     builder.addOperation(xop);
     builder.addOperation(yop);
 
-    unsigned int resolution[2] = {toOperation->getWidth(), toOperation->getHeight()};
-    translateOperation->setResolution(resolution);
-    xop->setResolution(resolution);
-    yop->setResolution(resolution);
+    const rcti &translate_canvas = toOperation->get_canvas();
+    translateOperation->set_canvas(translate_canvas);
+    xop->set_canvas(translate_canvas);
+    yop->set_canvas(translate_canvas);
     builder.addOperation(translateOperation);
 
     if (doScale) {
diff --git a/source/blender/compositor/intern/COM_Converter.h b/source/blender/compositor/intern/COM_Converter.h
index 28136437103..7f0402d4e70 100644
--- a/source/blender/compositor/intern/COM_Converter.h
+++ b/source/blender/compositor/intern/COM_Converter.h
@@ -65,8 +65,8 @@ NodeOperation *COM_convert_data_type(const NodeOperationOutput &from,
  * \note Conversion logic is implemented in this function.
  * \see InputSocketResizeMode for the possible conversions.
  */
-void COM_convert_resolution(NodeOperationBuilder &builder,
-                            NodeOperationOutput *fromSocket,
-                            NodeOperationInput *toSocket);
+void COM_convert_canvas(NodeOperationBuilder &builder,
+                        NodeOperationOutput *fromSocket,
+                        NodeOperationInput *toSocket);
 
 }  // namespace blender::compositor
diff --git a/source/blender/compositor/intern/COM_Debug.cc b/source/blender/compositor/intern/COM_Debug.cc
index a0333cf96cf..be606f0bd1f 100644
--- a/source/blender/compositor/intern/COM_Debug.cc
+++ b/source/blender/compositor/intern/COM_Debug.cc
@@ -162,8 +162,10 @@ int DebugInfo::graphviz_operation(const ExecutionSystem *system,
 
   len += snprintf(str + len,
                   maxlen > len ? maxlen - len : 0,
-                  "#%d (%u,%u)",
+                  "#%d (%i,%i) (%u,%u)",
                   operation->get_id(),
+                  operation->get_canvas().xmin,
+                  operation->get_canvas().ymin,
                   operation->getWidth(),
                   operation->getHeight());
 
diff --git a/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc b/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
index 71295f38c5b..66d34e58a3d 100644
--- a/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
+++ b/source/blender/compositor/intern/COM_FullFrameExecutionModel.cc
@@ -87,12 +87,9 @@ Vector<MemoryBuffer *> FullFrameExecutionModel::get_input_buffers(NodeOperation
 
 MemoryBuffer *FullFrameExecutionModel::create_operation_buffer(NodeOperation *op)
 {
-  rcti op_rect;
-  BLI_rcti_init(&op_rect, 0, op->getWidth(), 0, op->getHeight());
-
   const DataType data_type = op->getOutputSocket(0)->getDataType();
   const bool is_a_single_elem = op->get_flags().is_constant_operation;
-  return new MemoryBuffer(data_type, op_rect, is_a_single_elem);
+  return new MemoryBuffer(data_type, op->get_canvas(), is_a_single_elem);
 }
 
 void FullFrameExecutionModel::render_operation(NodeOperation *op)
@@ -199,12 +196,11 @@ void FullFrameExecutionModel::determine_areas_to_render(NodeOperation *output_op
     const int num_inputs = operation->getNumberOfInputSockets();
     for (int i = 0; i < num_inputs; i++) {
       NodeOperation *input_op = operation->get_input_operation(i);
-      rcti input_op_rect, input_area;
-      BLI_rcti_init(&input_op_rect, 0, input_op->getWidth(), 0, input_op->getHeight());
+      rcti input_area;
       operation->get_area_of_interest(input_op, render_area, input_area);
 
       /* Ensure area of interest is within operation bounds, cropping areas outside. */
-      BLI_rcti_isect(&input_area, &input_op_rect, &input_area);
+      BLI_rcti_isect(&input_area, &input_op->get_canvas(), &input_area);
 
       if (!BLI_rcti_is_empty(&input_area)) {
         stack.append({input_op, input_area});
diff --git a/source/blender/compositor/intern/COM_NodeOperation.cc b/source/blender/compositor/intern/COM_NodeOperation.cc
index 1b87cdf72fb..550801a8cdd 100644
--- a/source/blender/compositor/intern/COM_NodeOperation.cc
+++ b/source/blender/compositor/intern/COM_NodeOperation.cc
@@ -35,9 +35,8 @@ namespace blender::compositor {
 
 NodeOperation::NodeOperation()
 {
-  this->m_resolutionInputSocketIndex = 0;
-  this->m_width = 0;
-  this->m_height = 0;
+  canvas_input_index_ = 0;
+  canvas_ = COM_AREA_NONE;
   this->m_btree = nullptr;
 }
 
@@ -61,48 +60,46 @@ void NodeOperation::addOutputSocket(DataType datatype)
   m_outputs.append(NodeOperationOutput(this, datatype));
 }
 
-void NodeOperation::determineResolution(unsigned int resolution[2],
-                                        unsigned int preferredResolution[2])
+void NodeOperation::determine_canvas(const rcti &preferred_area, rcti &r_area)
 {
-  unsigned int used_resolution_index = 0;
-  if (m_resolutionInputSocketIndex == RESOLUTION_INPUT_ANY) {
+  unsigned int used_canvas_index = 0;
+  if (canvas_input_index_ == 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];
+      rcti any_area = COM_AREA_NONE;
+      const bool determined = input.determine_canvas(preferred_area, any_area);
+      if (determined) {
+        r_area = any_area;
         break;
       }
-      used_resolution_index += 1;
+      used_canvas_index += 1;
     }
   }
-  else if (m_resolutionInputSocketIndex < m_inputs.size()) {
-    NodeOperationInput &input = m_inputs[m_resolutionInputSocketIndex];
-    input.determineResolution(resolution, preferredResolution);
-    used_resolution_index = m_resolutionInputSocketIndex;
+  else if (canvas_input_index_ < m_inputs.size()) {
+    NodeOperationInput &input = m_inputs[canvas_input_index_];
+    input.determine_canvas(preferred_area, r_area);
+    used_canvas_index = canvas_input_index_;
   }
 
-  if (modify_determined_resolution_fn_) {
-    modify_determined_resolution_fn_(resolution);
+  if (modify_determined_canvas_fn_) {
+    modify_determined_canvas_fn_(r_area);
   }
 
-  unsigned int temp2[2] = {resolution[0], resolution[1]};
-  unsigned int temp[2];
+  rcti unused_area;
+  const rcti &local_preferred_area = r_area;
   for (unsigned int index = 0; index < m_inputs.size(); index++) {
-    if (index == used_resolution_index) {
+    if (index == used_canvas_index) {
       continue;
     }
     NodeOperationInput &input = m_inputs[index];
     if (input.isConnected()) {
-      input.determineResolution(temp, temp2);
+      input.determine_canvas(local_preferred_area, unused_area);
     }
   }
 }
 
-void NodeOperation::setResolutionInputSocketIndex(unsigned int index)
+void NodeOperation::set_canvas_input_index(unsigned int index)
 {
-  this->m_resolutionInputSocketIndex = index;
+  this->canvas_input_index_ = index;
 }
 
 void NodeOperation::init_data()
@@ -213,7 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list