Blender V4.3
COM_RotateOperation.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
8
9namespace blender::compositor {
10
12 private:
13 constexpr static int IMAGE_INPUT_INDEX = 0;
14 constexpr static int DEGREE_INPUT_INDEX = 1;
15
16 float cosine_;
17 float sine_;
18 bool do_degree2_rad_conversion_;
19 bool is_degree_set_;
20 PixelSampler sampler_;
21
22 public:
24
25 static void rotate_coords(
26 float &x, float &y, float center_x, float center_y, float sine, float cosine)
27 {
28 const float dx = x - center_x;
29 const float dy = y - center_y;
30 x = center_x + (cosine * dx + sine * dy);
31 y = center_y + (-sine * dx + cosine * dy);
32 }
33
34 static void get_rotation_center(const rcti &area, float &r_x, float &r_y);
35 static void get_rotation_offset(const rcti &input_canvas,
36 const rcti &rotate_canvas,
37 float &r_offset_x,
38 float &r_offset_y);
39 static void get_area_rotation_bounds(
40 const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds);
42 const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds);
43 static void get_rotation_area_of_interest(const rcti &input_canvas,
44 const rcti &rotate_canvas,
45 float sine,
46 float cosine,
47 const rcti &output_area,
48 rcti &r_input_area);
49 static void get_rotation_canvas(const rcti &input_canvas,
50 float sine,
51 float cosine,
52 rcti &r_canvas);
53
54 void init_data() override;
55
57 {
58 do_degree2_rad_conversion_ = abool;
59 }
60
62 {
63 sampler_ = sampler;
64 }
65
66 void ensure_degree();
67
68 void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override;
70 const rcti &area,
71 Span<MemoryBuffer *> inputs) override;
72
73 void determine_canvas(const rcti &preferred_area, rcti &r_area) override;
74};
75
76} // namespace blender::compositor
a MemoryBuffer contains access to the data
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
static void get_rotation_offset(const rcti &input_canvas, const rcti &rotate_canvas, float &r_offset_x, float &r_offset_y)
static void rotate_coords(float &x, float &y, float center_x, float center_y, float sine, float cosine)
static void get_rotation_area_of_interest(const rcti &input_canvas, const rcti &rotate_canvas, float sine, float cosine, const rcti &output_area, rcti &r_input_area)
static void get_area_rotation_bounds_inverted(const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds)
static void get_area_rotation_bounds(const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds)
static void get_rotation_canvas(const rcti &input_canvas, float sine, float cosine, rcti &r_canvas)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
static void get_rotation_center(const rcti &area, float &r_x, float &r_y)
void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override
Get input operation area being read by this operation on rendering given output area.
void set_sampler(PixelSampler sampler)
local_group_size(16, 16) .push_constant(Type local_group_size(16, 16) .push_constant(Type input_tx sampler(1, ImageType::FLOAT_2D, "matte_tx") .image(0