diff options
Diffstat (limited to 'source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp')
-rw-r--r-- | source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp | 49 |
1 files changed, 26 insertions, 23 deletions
diff --git a/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp index 0c7738e6c23..513158dcff6 100644 --- a/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp +++ b/source/blender/compositor/operations/COM_AlphaOverMixedOperation.cpp @@ -20,33 +20,36 @@ AlphaOverMixedOperation::AlphaOverMixedOperation() : MixBaseOperation() { - this->m_x = 0.0f; + this->m_x = 0.0f; } -void AlphaOverMixedOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void AlphaOverMixedOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float inputColor1[4]; - float inputOverColor[4]; - float value[4]; + float inputColor1[4]; + float inputOverColor[4]; + float value[4]; - this->m_inputValueOperation->readSampled(value, x, y, sampler); - this->m_inputColor1Operation->readSampled(inputColor1, x, y, sampler); - this->m_inputColor2Operation->readSampled(inputOverColor, x, y, sampler); + this->m_inputValueOperation->readSampled(value, x, y, sampler); + this->m_inputColor1Operation->readSampled(inputColor1, x, y, sampler); + this->m_inputColor2Operation->readSampled(inputOverColor, x, y, sampler); - if (inputOverColor[3] <= 0.0f) { - copy_v4_v4(output, inputColor1); - } - else if (value[0] == 1.0f && inputOverColor[3] >= 1.0f) { - copy_v4_v4(output, inputOverColor); - } - else { - float addfac = 1.0f - this->m_x + inputOverColor[3] * this->m_x; - float premul = value[0] * addfac; - float mul = 1.0f - value[0] * inputOverColor[3]; + if (inputOverColor[3] <= 0.0f) { + copy_v4_v4(output, inputColor1); + } + else if (value[0] == 1.0f && inputOverColor[3] >= 1.0f) { + copy_v4_v4(output, inputOverColor); + } + else { + float addfac = 1.0f - this->m_x + inputOverColor[3] * this->m_x; + float premul = value[0] * addfac; + float mul = 1.0f - value[0] * inputOverColor[3]; - output[0] = (mul * inputColor1[0]) + premul * inputOverColor[0]; - output[1] = (mul * inputColor1[1]) + premul * inputOverColor[1]; - output[2] = (mul * inputColor1[2]) + premul * inputOverColor[2]; - output[3] = (mul * inputColor1[3]) + value[0] * inputOverColor[3]; - } + output[0] = (mul * inputColor1[0]) + premul * inputOverColor[0]; + output[1] = (mul * inputColor1[1]) + premul * inputOverColor[1]; + output[2] = (mul * inputColor1[2]) + premul * inputOverColor[2]; + output[3] = (mul * inputColor1[3]) + value[0] * inputOverColor[3]; + } } |