diff options
Diffstat (limited to 'source/blender/compositor/operations/COM_ZCombineOperation.cpp')
-rw-r--r-- | source/blender/compositor/operations/COM_ZCombineOperation.cpp | 187 |
1 files changed, 99 insertions, 88 deletions
diff --git a/source/blender/compositor/operations/COM_ZCombineOperation.cpp b/source/blender/compositor/operations/COM_ZCombineOperation.cpp index 5c7472acbe8..222f42e8241 100644 --- a/source/blender/compositor/operations/COM_ZCombineOperation.cpp +++ b/source/blender/compositor/operations/COM_ZCombineOperation.cpp @@ -21,129 +21,140 @@ ZCombineOperation::ZCombineOperation() : NodeOperation() { - this->addInputSocket(COM_DT_COLOR); - this->addInputSocket(COM_DT_VALUE); - this->addInputSocket(COM_DT_COLOR); - this->addInputSocket(COM_DT_VALUE); - this->addOutputSocket(COM_DT_COLOR); - - this->m_image1Reader = NULL; - this->m_depth1Reader = NULL; - this->m_image2Reader = NULL; - this->m_depth2Reader = NULL; - + this->addInputSocket(COM_DT_COLOR); + this->addInputSocket(COM_DT_VALUE); + this->addInputSocket(COM_DT_COLOR); + this->addInputSocket(COM_DT_VALUE); + this->addOutputSocket(COM_DT_COLOR); + + this->m_image1Reader = NULL; + this->m_depth1Reader = NULL; + this->m_image2Reader = NULL; + this->m_depth2Reader = NULL; } void ZCombineOperation::initExecution() { - this->m_image1Reader = this->getInputSocketReader(0); - this->m_depth1Reader = this->getInputSocketReader(1); - this->m_image2Reader = this->getInputSocketReader(2); - this->m_depth2Reader = this->getInputSocketReader(3); + this->m_image1Reader = this->getInputSocketReader(0); + this->m_depth1Reader = this->getInputSocketReader(1); + this->m_image2Reader = this->getInputSocketReader(2); + this->m_depth2Reader = this->getInputSocketReader(3); } -void ZCombineOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void ZCombineOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float depth1[4]; - float depth2[4]; - - this->m_depth1Reader->readSampled(depth1, x, y, sampler); - this->m_depth2Reader->readSampled(depth2, x, y, sampler); - if (depth1[0] < depth2[0]) { - this->m_image1Reader->readSampled(output, x, y, sampler); - } - else { - this->m_image2Reader->readSampled(output, x, y, sampler); - } + float depth1[4]; + float depth2[4]; + + this->m_depth1Reader->readSampled(depth1, x, y, sampler); + this->m_depth2Reader->readSampled(depth2, x, y, sampler); + if (depth1[0] < depth2[0]) { + this->m_image1Reader->readSampled(output, x, y, sampler); + } + else { + this->m_image2Reader->readSampled(output, x, y, sampler); + } } -void ZCombineAlphaOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void ZCombineAlphaOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float depth1[4]; - float depth2[4]; - float color1[4]; - float color2[4]; - - this->m_depth1Reader->readSampled(depth1, x, y, sampler); - this->m_depth2Reader->readSampled(depth2, x, y, sampler); - if (depth1[0] <= depth2[0]) { - this->m_image1Reader->readSampled(color1, x, y, sampler); - this->m_image2Reader->readSampled(color2, x, y, sampler); - } - else { - this->m_image1Reader->readSampled(color2, x, y, sampler); - this->m_image2Reader->readSampled(color1, x, y, sampler); - } - float fac = color1[3]; - float ifac = 1.0f - fac; - output[0] = fac * color1[0] + ifac * color2[0]; - output[1] = fac * color1[1] + ifac * color2[1]; - output[2] = fac * color1[2] + ifac * color2[2]; - output[3] = max(color1[3], color2[3]); + float depth1[4]; + float depth2[4]; + float color1[4]; + float color2[4]; + + this->m_depth1Reader->readSampled(depth1, x, y, sampler); + this->m_depth2Reader->readSampled(depth2, x, y, sampler); + if (depth1[0] <= depth2[0]) { + this->m_image1Reader->readSampled(color1, x, y, sampler); + this->m_image2Reader->readSampled(color2, x, y, sampler); + } + else { + this->m_image1Reader->readSampled(color2, x, y, sampler); + this->m_image2Reader->readSampled(color1, x, y, sampler); + } + float fac = color1[3]; + float ifac = 1.0f - fac; + output[0] = fac * color1[0] + ifac * color2[0]; + output[1] = fac * color1[1] + ifac * color2[1]; + output[2] = fac * color1[2] + ifac * color2[2]; + output[3] = max(color1[3], color2[3]); } void ZCombineOperation::deinitExecution() { - this->m_image1Reader = NULL; - this->m_depth1Reader = NULL; - this->m_image2Reader = NULL; - this->m_depth2Reader = NULL; + this->m_image1Reader = NULL; + this->m_depth1Reader = NULL; + this->m_image2Reader = NULL; + this->m_depth2Reader = NULL; } // MASK combine ZCombineMaskOperation::ZCombineMaskOperation() : NodeOperation() { - this->addInputSocket(COM_DT_VALUE); //mask - this->addInputSocket(COM_DT_COLOR); - this->addInputSocket(COM_DT_COLOR); - this->addOutputSocket(COM_DT_COLOR); - - this->m_maskReader = NULL; - this->m_image1Reader = NULL; - this->m_image2Reader = NULL; + this->addInputSocket(COM_DT_VALUE); //mask + this->addInputSocket(COM_DT_COLOR); + this->addInputSocket(COM_DT_COLOR); + this->addOutputSocket(COM_DT_COLOR); + + this->m_maskReader = NULL; + this->m_image1Reader = NULL; + this->m_image2Reader = NULL; } void ZCombineMaskOperation::initExecution() { - this->m_maskReader = this->getInputSocketReader(0); - this->m_image1Reader = this->getInputSocketReader(1); - this->m_image2Reader = this->getInputSocketReader(2); + this->m_maskReader = this->getInputSocketReader(0); + this->m_image1Reader = this->getInputSocketReader(1); + this->m_image2Reader = this->getInputSocketReader(2); } -void ZCombineMaskOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void ZCombineMaskOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float mask[4]; - float color1[4]; - float color2[4]; + float mask[4]; + float color1[4]; + float color2[4]; - this->m_maskReader->readSampled(mask, x, y, sampler); - this->m_image1Reader->readSampled(color1, x, y, sampler); - this->m_image2Reader->readSampled(color2, x, y, sampler); + this->m_maskReader->readSampled(mask, x, y, sampler); + this->m_image1Reader->readSampled(color1, x, y, sampler); + this->m_image2Reader->readSampled(color2, x, y, sampler); - interp_v4_v4v4(output, color1, color2, 1.0f - mask[0]); + interp_v4_v4v4(output, color1, color2, 1.0f - mask[0]); } -void ZCombineMaskAlphaOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) +void ZCombineMaskAlphaOperation::executePixelSampled(float output[4], + float x, + float y, + PixelSampler sampler) { - float mask[4]; - float color1[4]; - float color2[4]; + float mask[4]; + float color1[4]; + float color2[4]; - this->m_maskReader->readSampled(mask, x, y, sampler); - this->m_image1Reader->readSampled(color1, x, y, sampler); - this->m_image2Reader->readSampled(color2, x, y, sampler); + this->m_maskReader->readSampled(mask, x, y, sampler); + this->m_image1Reader->readSampled(color1, x, y, sampler); + this->m_image2Reader->readSampled(color2, x, y, sampler); - float fac = (1.0f - mask[0]) * (1.0f - color1[3]) + mask[0] * color2[3]; - float mfac = 1.0f - fac; + float fac = (1.0f - mask[0]) * (1.0f - color1[3]) + mask[0] * color2[3]; + float mfac = 1.0f - fac; - output[0] = color1[0] * mfac + color2[0] * fac; - output[1] = color1[1] * mfac + color2[1] * fac; - output[2] = color1[2] * mfac + color2[2] * fac; - output[3] = max(color1[3], color2[3]); + output[0] = color1[0] * mfac + color2[0] * fac; + output[1] = color1[1] * mfac + color2[1] * fac; + output[2] = color1[2] * mfac + color2[2] * fac; + output[3] = max(color1[3], color2[3]); } void ZCombineMaskOperation::deinitExecution() { - this->m_image1Reader = NULL; - this->m_maskReader = NULL; - this->m_image2Reader = NULL; + this->m_image1Reader = NULL; + this->m_maskReader = NULL; + this->m_image2Reader = NULL; } |