diff options
author | Manuel Castilla <manzanillawork@gmail.com> | 2021-08-10 16:25:10 +0300 |
---|---|---|
committer | Manuel Castilla <manzanillawork@gmail.com> | 2021-08-10 17:16:23 +0300 |
commit | d481c6651d149bdc83a8c0bbb675d3d296f7c530 (patch) | |
tree | 96f7fca0fdf2a08eb1dabbfb2025ad88ae378c03 /source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc | |
parent | 8f6cc16490843bec88806c2f76c0aa012db938dd (diff) |
Compositor: Full frame color nodes
Adds full frame implementation to "Alpha Over",
"Hue Saturation Value", "Invert", "Tonemap" and "ZCombine" nodes.
The other nodes in "Color" submenu are implemented separately.
No functional changes.
Reviewed By: jbakker
Differential Revision: https://developer.blender.org/D12092
Diffstat (limited to 'source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc')
-rw-r--r-- | source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc index 3dd4607e273..a57e8c7f8a3 100644 --- a/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc +++ b/source/blender/compositor/operations/COM_AlphaOverPremultiplyOperation.cc @@ -20,6 +20,11 @@ namespace blender::compositor { +AlphaOverPremultiplyOperation::AlphaOverPremultiplyOperation() +{ + this->flags.can_be_constant = true; +} + void AlphaOverPremultiplyOperation::executePixelSampled(float output[4], float x, float y, @@ -50,4 +55,28 @@ void AlphaOverPremultiplyOperation::executePixelSampled(float output[4], } } +void AlphaOverPremultiplyOperation::update_memory_buffer_row(PixelCursor &p) +{ + for (; p.out < p.row_end; p.next()) { + const float *color1 = p.color1; + const float *over_color = p.color2; + const float value = *p.value; + + if (over_color[3] <= 0.0f) { + copy_v4_v4(p.out, color1); + } + else if (value == 1.0f && over_color[3] >= 1.0f) { + copy_v4_v4(p.out, over_color); + } + else { + const float mul = 1.0f - value * over_color[3]; + + p.out[0] = (mul * color1[0]) + value * over_color[0]; + p.out[1] = (mul * color1[1]) + value * over_color[1]; + p.out[2] = (mul * color1[2]) + value * over_color[2]; + p.out[3] = (mul * color1[3]) + value * over_color[3]; + } + } +} + } // namespace blender::compositor |