[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