Blender
V4.3
source
blender
compositor
operations
COM_LuminanceMatteOperation.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_LuminanceMatteOperation.h
"
6
7
#include "
IMB_colormanagement.hh
"
8
9
namespace
blender::compositor
{
10
11
LuminanceMatteOperation::LuminanceMatteOperation
()
12
{
13
add_input_socket
(
DataType::Color
);
14
add_output_socket
(
DataType::Value
);
15
16
flags_
.can_be_constant =
true
;
17
}
18
19
void
LuminanceMatteOperation::update_memory_buffer_partial
(
MemoryBuffer
*
output
,
20
const
rcti
&area,
21
Span<MemoryBuffer *>
inputs
)
22
{
23
for
(
BuffersIterator<float>
it =
output
->iterate_with(
inputs
, area); !it.is_end(); ++it) {
24
const
float
*
color
= it.in(0);
25
const
float
luminance =
IMB_colormanagement_get_luminance
(
color
);
26
27
/* One line thread-friend algorithm:
28
* `it.out[0] = std::min(color[3], std::min(1.0f, std::max(0.0f, ((luminance - low) / (high -
29
* low))));`
30
*/
31
32
/* Test range. */
33
const
float
high = settings_->t1;
34
const
float
low = settings_->t2;
35
float
alpha;
36
if
(luminance > high) {
37
alpha = 1.0f;
38
}
39
else
if
(luminance < low) {
40
alpha = 0.0f;
41
}
42
else
{
/* Blend. */
43
alpha = (luminance - low) / (high - low);
44
}
45
46
/* Store matte(alpha) value in [0] to go with
47
* COM_SetAlphaMultiplyOperation and the Value output.
48
*/
49
50
/* Don't make something that was more transparent less transparent. */
51
it.out[0] = std::min(alpha,
color
[3]);
52
}
53
}
54
55
}
// namespace blender::compositor
COM_LuminanceMatteOperation.h
IMB_colormanagement.hh
IMB_colormanagement_get_luminance
BLI_INLINE float IMB_colormanagement_get_luminance(const float rgb[3])
Definition
colormanagement_inline.h:22
output
#define output
blender::Span
Definition
BLI_span.hh:75
blender::compositor::LuminanceMatteOperation::update_memory_buffer_partial
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
Definition
COM_LuminanceMatteOperation.cc:19
blender::compositor::LuminanceMatteOperation::LuminanceMatteOperation
LuminanceMatteOperation()
Definition
COM_LuminanceMatteOperation.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
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