Blender
V4.3
source
blender
compositor
operations
COM_BrightnessOperation.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_BrightnessOperation.h
"
6
7
#include "
BLI_math_color.h
"
8
9
namespace
blender::compositor
{
10
11
BrightnessOperation::BrightnessOperation
()
12
{
13
this->
add_input_socket
(
DataType::Color
);
14
this->
add_input_socket
(
DataType::Value
);
15
this->
add_input_socket
(
DataType::Value
);
16
this->
add_output_socket
(
DataType::Color
);
17
use_premultiply_ =
false
;
18
flags_
.can_be_constant =
true
;
19
}
20
21
void
BrightnessOperation::set_use_premultiply
(
bool
use_premultiply)
22
{
23
use_premultiply_ = use_premultiply;
24
}
25
26
void
BrightnessOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
27
const
rcti
&area,
28
Span<MemoryBuffer *>
inputs
)
29
{
30
float
tmp_color[4];
31
for
(
BuffersIterator<float>
it =
output
->iterate_with(
inputs
, area); !it.is_end(); ++it) {
32
const
float
*in_color = it.in(0);
33
const
float
brightness = *it.in(1) / 100.0f;
34
const
float
contrast = *it.in(2);
35
float
delta = contrast / 200.0f;
36
/*
37
* The algorithm is by Werner D. Streidt
38
* (http://visca.com/ffactory/archives/5-99/msg00021.html)
39
* Extracted of OpenCV `demhist.c`.
40
*/
41
float
a,
b
;
42
if
(contrast > 0) {
43
a = 1.0f - delta * 2.0f;
44
a = 1.0f /
max_ff
(a, FLT_EPSILON);
45
b
= a * (brightness - delta);
46
}
47
else
{
48
delta *= -1;
49
a =
max_ff
(1.0f - delta * 2.0f, 0.0f);
50
b
= a * brightness + delta;
51
}
52
const
float
*
color
;
53
if
(use_premultiply_) {
54
premul_to_straight_v4_v4
(tmp_color, in_color);
55
color
= tmp_color;
56
}
57
else
{
58
color
= in_color;
59
}
60
it.out[0] = a *
color
[0] +
b
;
61
it.out[1] = a *
color
[1] +
b
;
62
it.out[2] = a *
color
[2] +
b
;
63
it.out[3] =
color
[3];
64
if
(use_premultiply_) {
65
straight_to_premul_v4
(it.out);
66
}
67
}
68
}
69
70
}
// namespace blender::compositor
max_ff
MINLINE float max_ff(float a, float b)
Definition
math_base_inline.c:408
BLI_math_color.h
straight_to_premul_v4
MINLINE void straight_to_premul_v4(float color[4])
Definition
math_color_inline.c:293
premul_to_straight_v4_v4
MINLINE void premul_to_straight_v4_v4(float straight[4], const float premul[4])
Definition
math_color_inline.c:262
COM_BrightnessOperation.h
output
#define output
blender::Span
Definition
BLI_span.hh:75
blender::compositor::BrightnessOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_BrightnessOperation.cc:26
blender::compositor::BrightnessOperation::set_use_premultiply
void set_use_premultiply(bool use_premultiply)
Definition
COM_BrightnessOperation.cc:21
blender::compositor::BrightnessOperation::BrightnessOperation
BrightnessOperation()
Definition
COM_BrightnessOperation.cc:11
blender::compositor::MemoryBuffer
a MemoryBuffer contains access to the data
Definition
COM_MemoryBuffer.h:35
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
b
local_group_size(16, 16) .push_constant(Type b
Definition
compositor_morphological_distance_info.hh:16
blender::compositor::DataType::Value
@ Value
Value data type.
Definition
COM_defines.h:23
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