Blender V4.3
COM_MathBaseOperation.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
16 protected:
18
19 protected:
21
22 float clamp_when_enabled(float value)
23 {
24 if (use_clamp_) {
25 return std::clamp(value, 0.0f, 1.0f);
26 }
27 return value;
28 }
29
30 void clamp_when_enabled(float *out)
31 {
32 if (use_clamp_) {
33 CLAMP(*out, 0.0f, 1.0f);
34 }
35 }
36
37 public:
41 void determine_canvas(const rcti &preferred_area, rcti &r_area) override;
42
43 void set_use_clamp(bool value)
44 {
45 use_clamp_ = value;
46 }
47
49 const rcti &area,
50 Span<MemoryBuffer *> inputs) final;
51
52 protected:
54};
55
56template<template<typename> typename TFunctor>
58 void update_memory_buffer_partial(BuffersIterator<float> &it) final
59 {
60 TFunctor functor;
61 for (; !it.is_end(); ++it) {
62 *it.out = functor(*it.in(0), *it.in(1));
63 clamp_when_enabled(it.out);
64 }
65 }
66};
67
68class MathAddOperation : public MathFunctor2Operation<std::plus> {};
69class MathSubtractOperation : public MathFunctor2Operation<std::minus> {};
70class MathMultiplyOperation : public MathFunctor2Operation<std::multiplies> {};
72 protected:
74};
76 protected:
78};
80 protected:
82};
84 protected:
86};
87
100
102 protected:
104};
106 protected:
108};
110 protected:
112};
114 protected:
116};
118 protected:
120};
122 protected:
124};
126 protected:
128};
130 protected:
132};
133class MathLessThanOperation : public MathFunctor2Operation<std::less> {};
134class MathGreaterThanOperation : public MathFunctor2Operation<std::greater> {};
135
137 protected:
139};
140
142 protected:
144};
145
147 protected:
149};
150
152 protected:
154};
155
157 protected:
159};
160
162 protected:
164};
165
167 protected:
169};
170
172 protected:
174};
175
177 protected:
179};
180
182 protected:
184};
185
187 protected:
189};
190
192 protected:
194};
195
197 protected:
199};
200
202 protected:
204};
205
207 protected:
209};
210
212 protected:
214};
215
217 protected:
219};
220
222 protected:
224};
225
227 protected:
229};
230
232 protected:
234};
235
237 protected:
239};
240
241} // namespace blender::compositor
#define CLAMP(a, b, c)
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
virtual void update_memory_buffer_partial(BuffersIterator< float > &it)=0
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) final
void determine_canvas(const rcti &preferred_area, rcti &r_area) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
void update_memory_buffer_partial(BuffersIterator< float > &it) override
a MemoryBuffer contains access to the data
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator