Blender V4.3
COM_CryptomatteOperation.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2018 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
7namespace blender::compositor {
8
10{
11 inputs.resize(num_inputs);
12 for (size_t i = 0; i < num_inputs; i++) {
14 }
17}
18
20{
21 for (size_t i = 0; i < inputs.size(); i++) {
22 inputs[i] = this->get_input_socket_reader(i);
23 }
24}
25
27{
28 if (object_index != 0.0f) {
29 object_index_.append(object_index);
30 }
31}
32
34 const rcti &area,
36{
37 for (BuffersIterator<float> it = output->iterate_with(inputs, area); !it.is_end(); ++it) {
38 zero_v4(it.out);
39 for (int i = 0; i < it.get_num_inputs(); i++) {
40 const float *input = it.in(i);
41 if (i == 0) {
42 /* Write the front-most object as false color for picking. */
43 it.out[0] = input[0];
44 uint32_t m3hash;
45 ::memcpy(&m3hash, &input[0], sizeof(uint32_t));
46 /* Since the red channel is likely to be out of display range,
47 * setting green and blue gives more meaningful images. */
48 it.out[1] = (float(m3hash << 8) / float(UINT32_MAX));
49 it.out[2] = (float(m3hash << 16) / float(UINT32_MAX));
50 }
51 for (const float hash : object_index_) {
52 if (input[0] == hash) {
53 it.out[3] += input[1];
54 }
55 if (input[2] == hash) {
56 it.out[3] += input[3];
57 }
58 }
59 }
60 }
61}
62
69
71 const rcti &area,
73{
74 for (BuffersIterator<float> it = output->iterate_with(inputs, area); !it.is_end(); ++it) {
75 const float *color = it.in(0);
76 copy_v3_v3(it.out, color);
77 it.out[3] = 1.0f;
78 }
79}
80
81std::unique_ptr<MetaData> CryptomattePickOperation::get_meta_data()
82{
83 std::unique_ptr<MetaData> meta_data = std::make_unique<MetaData>();
84 meta_data->is_data = true;
85 return meta_data;
86}
87
88} // namespace blender::compositor
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void zero_v4(float r[4])
void append(const T &value)
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
std::unique_ptr< MetaData > get_meta_data() override
void update_memory_buffer_partial(MemoryBuffer *output, const rcti &area, Span< MemoryBuffer * > inputs) override
a MemoryBuffer contains access to the data
void add_output_socket(DataType datatype)
SocketReader * get_input_socket_reader(unsigned int index)
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
draw_view in_light_buf[] float
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator
#define hash
Definition noise.c:154
unsigned int uint32_t
Definition stdint.h:80
#define UINT32_MAX
Definition stdint.h:142