From 70a8a9e4d9ff53f559d6f3ca9d5e5150e6e913d9 Mon Sep 17 00:00:00 2001 From: Omar Emara Date: Wed, 24 Jan 2024 11:08:41 +0200 Subject: [PATCH] Compositor: make Flip node works in local space This patch changes the operation space of the Flip node from the global space to the local space. This means that the Flip node will now flip the image without changing its location. --- .../operations/COM_FlipOperation.cc | 72 ------------------- .../compositor/operations/COM_FlipOperation.h | 5 -- 2 files changed, 77 deletions(-) diff --git a/source/blender/compositor/operations/COM_FlipOperation.cc b/source/blender/compositor/operations/COM_FlipOperation.cc index 31323a33b94..fdd10a4f645 100644 --- a/source/blender/compositor/operations/COM_FlipOperation.cc +++ b/source/blender/compositor/operations/COM_FlipOperation.cc @@ -34,78 +34,6 @@ void FlipOperation::execute_pixel_sampled(float output[4], float x, float y, Pix input_operation_->read_sampled(output, nx, ny, sampler); } -bool FlipOperation::determine_depending_area_of_interest(rcti *input, - ReadBufferOperation *read_operation, - rcti *output) -{ - rcti new_input; - - if (flip_x_) { - const int w = int(this->get_width()) - 1; - new_input.xmax = (w - input->xmin) + 1; - new_input.xmin = (w - input->xmax) - 1; - } - else { - new_input.xmin = input->xmin; - new_input.xmax = input->xmax; - } - if (flip_y_) { - const int h = int(this->get_height()) - 1; - new_input.ymax = (h - input->ymin) + 1; - new_input.ymin = (h - input->ymax) - 1; - } - else { - new_input.ymin = input->ymin; - new_input.ymax = input->ymax; - } - - return NodeOperation::determine_depending_area_of_interest(&new_input, read_operation, output); -} - -void FlipOperation::determine_canvas(const rcti &preferred_area, rcti &r_area) -{ - NodeOperation::determine_canvas(preferred_area, r_area); - if (execution_model_ == eExecutionModel::FullFrame) { - rcti input_area = r_area; - if (flip_x_) { - const int width = BLI_rcti_size_x(&input_area) - 1; - r_area.xmax = (width - input_area.xmin) + 1; - r_area.xmin = (width - input_area.xmax) + 1; - } - if (flip_y_) { - const int height = BLI_rcti_size_y(&input_area) - 1; - r_area.ymax = (height - input_area.ymin) + 1; - r_area.ymin = (height - input_area.ymax) + 1; - } - } -} - -void FlipOperation::get_area_of_interest(const int input_idx, - const rcti &output_area, - rcti &r_input_area) -{ - BLI_assert(input_idx == 0); - UNUSED_VARS_NDEBUG(input_idx); - if (flip_x_) { - const int w = int(this->get_width()) - 1; - r_input_area.xmax = (w - output_area.xmin) + 1; - r_input_area.xmin = (w - output_area.xmax) + 1; - } - else { - r_input_area.xmin = output_area.xmin; - r_input_area.xmax = output_area.xmax; - } - if (flip_y_) { - const int h = int(this->get_height()) - 1; - r_input_area.ymax = (h - output_area.ymin) + 1; - r_input_area.ymin = (h - output_area.ymax) + 1; - } - else { - r_input_area.ymin = output_area.ymin; - r_input_area.ymax = output_area.ymax; - } -} - void FlipOperation::update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span inputs) diff --git a/source/blender/compositor/operations/COM_FlipOperation.h b/source/blender/compositor/operations/COM_FlipOperation.h index e893d47209e..98884887dbc 100644 --- a/source/blender/compositor/operations/COM_FlipOperation.h +++ b/source/blender/compositor/operations/COM_FlipOperation.h @@ -16,9 +16,6 @@ class FlipOperation : public MultiThreadedOperation { public: FlipOperation(); - bool determine_depending_area_of_interest(rcti *input, - ReadBufferOperation *read_operation, - rcti *output) override; void execute_pixel_sampled(float output[4], float x, float y, PixelSampler sampler) override; void init_execution() override; @@ -32,8 +29,6 @@ class FlipOperation : public MultiThreadedOperation { flip_y_ = flipY; } - void determine_canvas(const rcti &preferred_area, rcti &r_area) override; - void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override; void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span inputs) override;