Changeset View
Changeset View
Standalone View
Standalone View
source/blender/compositor/operations/COM_RotateOperation.h
| Show All 23 Lines | |||||
| class RotateOperation : public MultiThreadedOperation { | class RotateOperation : public MultiThreadedOperation { | ||||
| private: | private: | ||||
| constexpr static int IMAGE_INPUT_INDEX = 0; | constexpr static int IMAGE_INPUT_INDEX = 0; | ||||
| constexpr static int DEGREE_INPUT_INDEX = 1; | constexpr static int DEGREE_INPUT_INDEX = 1; | ||||
| SocketReader *m_imageSocket; | SocketReader *m_imageSocket; | ||||
| SocketReader *m_degreeSocket; | SocketReader *m_degreeSocket; | ||||
| /* TODO(manzanilla): to be removed with tiled implementation. */ | |||||
| float m_centerX; | float m_centerX; | ||||
| float m_centerY; | float m_centerY; | ||||
| float m_cosine; | float m_cosine; | ||||
| float m_sine; | float m_sine; | ||||
| bool m_doDegree2RadConversion; | bool m_doDegree2RadConversion; | ||||
| bool m_isDegreeSet; | bool m_isDegreeSet; | ||||
| PixelSampler sampler_; | PixelSampler sampler_; | ||||
| public: | public: | ||||
| RotateOperation(); | RotateOperation(); | ||||
| static void rotate_coords( | static void rotate_coords( | ||||
| float &x, float &y, float center_x, float center_y, float sine, float cosine) | float &x, float &y, float center_x, float center_y, float sine, float cosine) | ||||
| { | { | ||||
| const float dx = x - center_x; | const float dx = x - center_x; | ||||
| const float dy = y - center_y; | const float dy = y - center_y; | ||||
| x = center_x + (cosine * dx + sine * dy); | x = center_x + (cosine * dx + sine * dy); | ||||
| y = center_y + (-sine * dx + cosine * dy); | y = center_y + (-sine * dx + cosine * dy); | ||||
| } | } | ||||
| static void get_rotation_center(const rcti &area, float &r_x, float &r_y); | |||||
| static void get_rotation_offset(const rcti &input_canvas, | |||||
| const rcti &rotate_canvas, | |||||
| float &r_offset_x, | |||||
| float &r_offset_y); | |||||
| static void get_area_rotation_bounds(const rcti &area, | static void get_area_rotation_bounds(const rcti &area, | ||||
| const float center_x, | const float center_x, | ||||
| const float center_y, | const float center_y, | ||||
| const float sine, | const float sine, | ||||
| const float cosine, | const float cosine, | ||||
| rcti &r_bounds); | rcti &r_bounds); | ||||
| static void get_area_rotation_bounds_inverted(const rcti &area, | |||||
| const float center_x, | |||||
| const float center_y, | |||||
| const float sine, | |||||
| const float cosine, | |||||
| rcti &r_bounds); | |||||
| static void get_rotation_area_of_interest(const rcti &input_canvas, | |||||
| const rcti &rotate_canvas, | |||||
| const float sine, | |||||
| const float cosine, | |||||
| const rcti &output_area, | |||||
| rcti &r_input_area); | |||||
| static void get_rotation_canvas(const rcti &input_canvas, | |||||
| const float sine, | |||||
| const float cosine, | |||||
| rcti &r_canvas); | |||||
| bool determineDependingAreaOfInterest(rcti *input, | bool determineDependingAreaOfInterest(rcti *input, | ||||
| ReadBufferOperation *readOperation, | ReadBufferOperation *readOperation, | ||||
| rcti *output) override; | rcti *output) override; | ||||
| void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | void executePixelSampled(float output[4], float x, float y, PixelSampler sampler) override; | ||||
| void init_data() override; | void init_data() override; | ||||
| void initExecution() override; | void initExecution() override; | ||||
| void deinitExecution() override; | void deinitExecution() override; | ||||
| Show All 9 Lines | public: | ||||
| } | } | ||||
| void ensureDegree(); | void ensureDegree(); | ||||
| void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_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, | void update_memory_buffer_partial(MemoryBuffer *output, | ||||
| const rcti &area, | const rcti &area, | ||||
| Span<MemoryBuffer *> inputs) override; | Span<MemoryBuffer *> inputs) override; | ||||
| void determine_canvas(const rcti &preferred_area, rcti &r_area) override; | |||||
| }; | }; | ||||
| } // namespace blender::compositor | } // namespace blender::compositor | ||||