Blender V4.3
COM_GammaCorrectOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7namespace blender::compositor {
8
15
17 const rcti &area,
19{
20 const MemoryBuffer *input = inputs[0];
21 for (BuffersIterator<float> it = output->iterate_with({}, area); !it.is_end(); ++it) {
22 float color[4];
23 input->read_elem(it.x, it.y, color);
24 if (color[3] > 0.0f) {
25 color[0] /= color[3];
26 color[1] /= color[3];
27 color[2] /= color[3];
28 }
29
30 /* Check for negative to avoid NAN's. */
31 it.out[0] = color[0] > 0.0f ? color[0] * color[0] : 0.0f;
32 it.out[1] = color[1] > 0.0f ? color[1] * color[1] : 0.0f;
33 it.out[2] = color[2] > 0.0f ? color[2] * color[2] : 0.0f;
34 it.out[3] = color[3];
35
36 if (color[3] > 0.0f) {
37 it.out[0] *= color[3];
38 it.out[1] *= color[3];
39 it.out[2] *= color[3];
40 }
41 }
42}
43
50
52 const rcti &area,
54{
55 const MemoryBuffer *input = inputs[0];
56 for (BuffersIterator<float> it = output->iterate_with({}, area); !it.is_end(); ++it) {
57 float color[4];
58 input->read_elem(it.x, it.y, color);
59 if (color[3] > 0.0f) {
60 color[0] /= color[3];
61 color[1] /= color[3];
62 color[2] /= color[3];
63 }
64
65 it.out[0] = color[0] > 0.0f ? sqrtf(color[0]) : 0.0f;
66 it.out[1] = color[1] > 0.0f ? sqrtf(color[1]) : 0.0f;
67 it.out[2] = color[2] > 0.0f ? sqrtf(color[2]) : 0.0f;
68 it.out[3] = color[3];
69
70 if (color[3] > 0.0f) {
71 it.out[0] *= color[3];
72 it.out[1] *= color[3];
73 it.out[2] *= color[3];
74 }
75 }
76}
77
78} // namespace blender::compositor
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
a MemoryBuffer contains access to the data
void read_elem(int x, int y, float *out) const
void add_output_socket(DataType datatype)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
#define sqrtf(x)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator