Blender
V4.3
source
blender
compositor
operations
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
5
#include "
COM_GammaCorrectOperation.h
"
6
7
namespace
blender::compositor
{
8
9
GammaCorrectOperation::GammaCorrectOperation
()
10
{
11
this->
add_input_socket
(
DataType::Color
);
12
this->
add_output_socket
(
DataType::Color
);
13
flags_
.can_be_constant =
true
;
14
}
15
16
void
GammaCorrectOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
17
const
rcti
&area,
18
Span<MemoryBuffer *>
inputs
)
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
44
GammaUncorrectOperation::GammaUncorrectOperation
()
45
{
46
this->
add_input_socket
(
DataType::Color
);
47
this->
add_output_socket
(
DataType::Color
);
48
flags_
.can_be_constant =
true
;
49
}
50
51
void
GammaUncorrectOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
52
const
rcti
&area,
53
Span<MemoryBuffer *>
inputs
)
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
COM_GammaCorrectOperation.h
output
#define output
blender::Span
Definition
BLI_span.hh:75
blender::compositor::GammaCorrectOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_GammaCorrectOperation.cc:16
blender::compositor::GammaCorrectOperation::GammaCorrectOperation
GammaCorrectOperation()
Definition
COM_GammaCorrectOperation.cc:9
blender::compositor::GammaUncorrectOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_GammaCorrectOperation.cc:51
blender::compositor::GammaUncorrectOperation::GammaUncorrectOperation
GammaUncorrectOperation()
Definition
COM_GammaCorrectOperation.cc:44
blender::compositor::MemoryBuffer
a MemoryBuffer contains access to the data
Definition
COM_MemoryBuffer.h:35
blender::compositor::MemoryBuffer::read_elem
void read_elem(int x, int y, float *out) const
Definition
COM_MemoryBuffer.h:186
blender::compositor::NodeOperation::add_output_socket
void add_output_socket(DataType datatype)
Definition
COM_NodeOperation.cc:102
blender::compositor::NodeOperation::flags_
NodeOperationFlags flags_
Definition
COM_NodeOperation.h:295
blender::compositor::NodeOperation::add_input_socket
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
Definition
COM_NodeOperation.cc:97
sqrtf
#define sqrtf(x)
Definition
device/metal/compat.h:312
blender::compositor::DataType::Color
@ Color
Color data type.
Definition
COM_defines.h:27
blender::color
Definition
BLI_color_mix.hh:21
blender::compositor
Definition
COM_JumpFloodingAlgorithm.cc:20
blender::compositor::BuffersIterator
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
Definition
COM_BuffersIterator.h:179
inputs
static blender::bke::bNodeSocketTemplate inputs[]
Definition
node_texture_at.cc:11
rcti
Definition
DNA_vec_types.h:68
Generated on Sat Oct 4 2025 05:32:23 for Blender by
doxygen
1.14.0