Blender  V3.3
COM_VariableSizeBokehBlurOperation.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 
8 
9 namespace blender::compositor {
10 
11 //#define COM_DEFOCUS_SEARCH
12 
14  private:
15  static constexpr int IMAGE_INPUT_INDEX = 0;
16  static constexpr int BOKEH_INPUT_INDEX = 1;
17  static constexpr int SIZE_INPUT_INDEX = 2;
18 #ifdef COM_DEFOCUS_SEARCH
19  static constexpr int DEFOCUS_INPUT_INDEX = 3;
20 #endif
21 
22  int max_blur_;
23  float threshold_;
24  bool do_size_scale_; /* scale size, matching 'BokehBlurNode' */
25  SocketReader *input_program_;
26  SocketReader *input_bokeh_program_;
27  SocketReader *input_size_program_;
28 #ifdef COM_DEFOCUS_SEARCH
29  SocketReader *input_search_program_;
30 #endif
31 
32  public:
34 
38  void execute_pixel(float output[4], int x, int y, void *data) override;
39 
43  void init_execution() override;
44 
45  void *initialize_tile_data(rcti *rect) override;
46 
47  void deinitialize_tile_data(rcti *rect, void *data) override;
48 
52  void deinit_execution() override;
53 
55  ReadBufferOperation *read_operation,
56  rcti *output) override;
57 
58  void set_max_blur(int max_radius)
59  {
60  max_blur_ = max_radius;
61  }
62 
64  {
65  threshold_ = threshold;
66  }
67 
68  void set_do_scale_size(bool scale_size)
69  {
70  do_size_scale_ = scale_size;
71  }
72 
73  void execute_opencl(OpenCLDevice *device,
74  MemoryBuffer *output_memory_buffer,
75  cl_mem cl_output_buffer,
76  MemoryBuffer **input_memory_buffers,
77  std::list<cl_mem> *cl_mem_to_clean_up,
78  std::list<cl_kernel> *cl_kernels_to_clean_up) override;
79 
80  void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override;
82  const rcti &area,
83  Span<MemoryBuffer *> inputs) override;
84 };
85 
86 /* Currently unused. If ever used, it needs full-frame implementation. */
87 #ifdef COM_DEFOCUS_SEARCH
88 class InverseSearchRadiusOperation : public NodeOperation {
89  private:
90  int max_blur_;
91  SocketReader *input_radius_;
92 
93  public:
94  static const int DIVIDER = 4;
95 
96  InverseSearchRadiusOperation();
97 
101  void execute_pixel_chunk(float output[4], int x, int y, void *data);
102 
106  void init_execution() override;
107  void *initialize_tile_data(rcti *rect) override;
108  void deinitialize_tile_data(rcti *rect, void *data) override;
109 
113  void deinit_execution() override;
114 
115  bool determine_depending_area_of_interest(rcti *input,
116  ReadBufferOperation *read_operation,
117  rcti *output) override;
118  void determine_canvas(const rcti &preferred_area, rcti &r_area) override;
119 
120  void set_max_blur(int max_radius)
121  {
122  max_blur_ = max_radius;
123  }
124 };
125 #endif
126 
127 } // 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.
device representing an GPU OpenCL device. an instance of this class represents a single cl_device
bool determine_depending_area_of_interest(rcti *input, ReadBufferOperation *read_operation, rcti *output) override
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 execute_opencl(OpenCLDevice *device, MemoryBuffer *output_memory_buffer, cl_mem cl_output_buffer, MemoryBuffer **input_memory_buffers, std::list< cl_mem > *cl_mem_to_clean_up, std::list< cl_kernel > *cl_kernels_to_clean_up) override
custom handle to add new tasks to the OpenCL command queue in order to execute a chunk on an GPUDevic...
void execute_pixel(float output[4], int x, int y, void *data) override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
static struct ImBuf * init_execution(const SeqRenderData *context, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *ibuf3)
Definition: effects.c:3519
ccl_gpu_kernel_postfix ccl_global float int int int int float threshold
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])
NodeOperation SocketReader
static bNodeSocketTemplate inputs[]