Blender  V3.3
COM_RotateOperation.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2011 Blender Foundation. */
3 
4 #pragma once
5 
7 
8 namespace blender::compositor {
9 
11  private:
12  constexpr static int IMAGE_INPUT_INDEX = 0;
13  constexpr static int DEGREE_INPUT_INDEX = 1;
14 
15  SocketReader *image_socket_;
16  SocketReader *degree_socket_;
17  /* TODO(manzanilla): to be removed with tiled implementation. */
18  float center_x_;
19  float center_y_;
20 
21  float cosine_;
22  float sine_;
23  bool do_degree2_rad_conversion_;
24  bool is_degree_set_;
25  PixelSampler sampler_;
26 
27  public:
29 
30  static void rotate_coords(
31  float &x, float &y, float center_x, float center_y, float sine, float cosine)
32  {
33  const float dx = x - center_x;
34  const float dy = y - center_y;
35  x = center_x + (cosine * dx + sine * dy);
36  y = center_y + (-sine * dx + cosine * dy);
37  }
38 
39  static void get_rotation_center(const rcti &area, float &r_x, float &r_y);
40  static void get_rotation_offset(const rcti &input_canvas,
41  const rcti &rotate_canvas,
42  float &r_offset_x,
43  float &r_offset_y);
44  static void get_area_rotation_bounds(
45  const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds);
47  const rcti &area, float center_x, float center_y, float sine, float cosine, rcti &r_bounds);
48  static void get_rotation_area_of_interest(const rcti &input_canvas,
49  const rcti &rotate_canvas,
50  float sine,
51  float cosine,
52  const rcti &output_area,
53  rcti &r_input_area);
54  static void get_rotation_canvas(const rcti &input_canvas,
55  float sine,
56  float cosine,
57  rcti &r_canvas);
58 
60  ReadBufferOperation *read_operation,
61  rcti *output) override;
62  void execute_pixel_sampled(float output[4], float x, float y, PixelSampler sampler) override;
63  void init_data() override;
64  void init_execution() override;
65  void deinit_execution() override;
66 
68  {
69  do_degree2_rad_conversion_ = abool;
70  }
71 
73  {
74  sampler_ = sampler;
75  }
76 
77  void ensure_degree();
78 
79  void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override;
81  const rcti &area,
82  Span<MemoryBuffer *> inputs) override;
83 
84  void determine_canvas(const rcti &preferred_area, rcti &r_area) override;
85 };
86 
87 } // namespace blender::compositor
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
a MemoryBuffer contains access to the data of a chunk
NodeOperation contains calculation logic.
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 execute_pixel_sampled(float output[4], float x, float y, PixelSampler sampler) override
calculate a single pixel
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output) 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)
depth_tx sampler(1, ImageType::FLOAT_2D, "combined_tx") .sampler(2
ccl_global KernelShaderEvalInput ccl_global float * output
ccl_global KernelShaderEvalInput * input
static void area(int d1, int d2, int e1, int e2, float weights[2])
static bNodeSocketTemplate inputs[]