Blender V4.3
COM_ScreenLensDistortionOperation.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#include "DNA_node_types.h"
9
10struct RNG;
11
12namespace blender::compositor {
13
15 private:
16 struct RNG *rng_;
17
18 bool fit_;
19 bool jitter_;
20
21 float dispersion_;
22 float distortion_;
23 bool dispersion_const_;
24 bool distortion_const_;
25 bool variables_ready_;
26 float k_[3];
27 float k4_[3];
28 float dk4_[3];
29 float maxk_;
30 float sc_, cx_, cy_;
31
32 public:
34
35 void init_data() override;
36
37 void init_execution() override;
38 void deinit_execution() override;
39
40 void set_fit(bool fit)
41 {
42 fit_ = fit;
43 }
44 void set_jitter(bool jitter)
45 {
46 jitter_ = jitter;
47 }
48
50 void set_distortion(float distortion);
52 void set_dispersion(float dispersion);
53
54 void determine_canvas(const rcti &preferred_area, rcti &r_area) override;
55 void get_area_of_interest(int input_idx, const rcti &output_area, rcti &r_input_area) override;
57 const rcti &area,
58 Span<MemoryBuffer *> inputs) override;
59
60 private:
61 void determineUV(float result[6], float x, float y) const;
62 void update_variables(float distortion, float dispersion);
63
64 void get_uv(const float xy[2], float uv[2]) const;
65 void distort_uv(const float uv[2], float t, float xy[2]) const;
66 bool get_delta(float r_sq, float k4, const float uv[2], float delta[2]) const;
67 void accumulate(const MemoryBuffer *buffer,
68 int a,
69 int b,
70 float r_sq,
71 const float uv[2],
72 const float delta[3][2],
73 float sum[4],
74 int count[3]) const;
75};
76
77} // namespace blender::compositor
static T sum(const btAlignedObjectArray< T > &items)
a MemoryBuffer contains access to the data
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) 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 determine_canvas(const rcti &preferred_area, rcti &r_area) override
local_group_size(16, 16) .push_constant(Type b
double k4_
int count
Definition rand.cc:33
int xy[2]
Definition wm_draw.cc:170