25 const float depth1 = *it.in(1);
26 const float depth2 = *it.in(3);
27 const float *color = (depth1 < depth2) ? it.in(0) : it.in(2);
32void ZCombineAlphaOperation::update_memory_buffer_partial(
MemoryBuffer *output,
37 const float depth1 = *it.in(1);
38 const float depth2 = *it.in(3);
41 if (depth1 < depth2) {
49 const float fac = color1[3];
50 const float ifac = 1.0f - fac;
51 it.out[0] = fac * color1[0] + ifac * color2[0];
52 it.out[1] = fac * color1[1] + ifac * color2[1];
53 it.out[2] = fac * color1[2] + ifac * color2[2];
54 it.out[3] = std::max(color1[3], color2[3]);
72 const float mask = *it.in(0);
73 const float *color1 = it.in(1);
74 const float *color2 = it.in(2);
79void ZCombineMaskAlphaOperation::update_memory_buffer_partial(
MemoryBuffer *output,
84 const float mask = *it.in(0);
85 const float *color1 = it.in(1);
86 const float *color2 = it.in(2);
87 const float fac = (1.0f -
mask) * (1.0f - color1[3]) + mask * color2[3];
88 const float mfac = 1.0f - fac;
90 it.out[0] = color1[0] * mfac + color2[0] * fac;
91 it.out[1] = color1[1] * mfac + color2[1] * fac;
92 it.out[2] = color1[2] * mfac + color2[2] * fac;
93 it.out[3] = std::max(color1[3], color2[3]);
MINLINE void copy_v4_v4(float r[4], const float a[4])
void interp_v4_v4v4(float r[4], const float a[4], const float b[4], float t)
a MemoryBuffer contains access to the data
void add_output_socket(DataType datatype)
NodeOperationFlags flags_
void add_input_socket(DataType datatype, ResizeMode resize_mode=ResizeMode::Center)
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
ccl_device_inline float4 mask(const int4 mask, const float4 a)
typename BuffersIteratorBuilder< T >::Iterator BuffersIterator