Commit: a0a9499a3a6bc8001c59c7b547ca7a7781415c9a Author: Manuel Castilla Date: Mon Sep 6 15:48:48 2021 +0200 Branches: temp-compositor-canvas https://developer.blender.org/rBa0a9499a3a6bc8001c59c7b547ca7a7781415c9a
Compositor: Replace resolution concept by canvas This is a code refactor in preparation of supporting canvas compositing. 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_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_ProjectorLensDistortionOperation.cc 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_TransformOperation.cc 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 73c4343a230..e0f23fbede3 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_SINGLE_ELEM_AREA = {0, 1, 0, 1}; +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 4b103c21c75..bd05a8e4ef0 100644 --- a/source/blender/compositor/intern/COM_Converter.cc +++ b/source/blender/compositor/intern/COM_Converter.cc @@ -460,9 +460,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. */ @@ -535,10 +535,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); } @@ -557,10 +557,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 007085ee528..82be778e048 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 bd3a481d691..957bbe24e5f 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); 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 3bbd1b22d60..ff232efdb08 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; } @@ -48,7 +47,7 @@ NodeOperation::NodeOperation() */ std::optional<NodeOperationHash> NodeOperation::generate_hash() { - params_hash_ = get_default_hash_2(m_width, m_height); + params_hash_ = get_default_hash_2(canvas_.xmin, canvas_.xmax); /* Hash subclasses params. */ is_hash_output_params_implemented_ = true; @@ -57,7 +56,11 @@ std::optional<NodeOperationHash> NodeOperation::generate_hash() return std::nullopt; } - hash_param(getOutputSocket()->getDataType()); + hash_params(canvas_.ymin, canvas_.ymax); + if (m_outputs.size() > 0) { + BLI_assert(m_outputs.size() == 1); + hash_param(this->getOutputSocket()->getDataType()); + } NodeOperationHash hash; hash.params_hash_ = params_hash_; @@ -108,48 +111,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_pr @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs