Changeset View
Changeset View
Standalone View
Standalone View
source/blender/compositor/operations/COM_ChangeHSVOperation.cpp
| Show All 19 Lines | |||||
| * Monique Dewanchand | * Monique Dewanchand | ||||
| */ | */ | ||||
| #include "COM_ChangeHSVOperation.h" | #include "COM_ChangeHSVOperation.h" | ||||
| ChangeHSVOperation::ChangeHSVOperation() : NodeOperation() | ChangeHSVOperation::ChangeHSVOperation() : NodeOperation() | ||||
| { | { | ||||
| this->addInputSocket(COM_DT_COLOR); | this->addInputSocket(COM_DT_COLOR); | ||||
| this->addInputSocket(COM_DT_VALUE); | |||||
| this->addInputSocket(COM_DT_VALUE); | |||||
| this->addInputSocket(COM_DT_VALUE); | |||||
| this->addOutputSocket(COM_DT_COLOR); | this->addOutputSocket(COM_DT_COLOR); | ||||
| this->m_inputOperation = NULL; | this->m_inputOperation = NULL; | ||||
| } | } | ||||
| void ChangeHSVOperation::initExecution() | void ChangeHSVOperation::initExecution() | ||||
| { | { | ||||
| this->m_inputOperation = getInputSocketReader(0); | this->m_inputOperation = getInputSocketReader(0); | ||||
| this->m_hueOperation = getInputSocketReader(1); | |||||
| this->m_saturationOperation = getInputSocketReader(2); | |||||
| this->m_valueOperation = getInputSocketReader(3); | |||||
| } | } | ||||
| void ChangeHSVOperation::deinitExecution() | void ChangeHSVOperation::deinitExecution() | ||||
| { | { | ||||
| this->m_inputOperation = NULL; | this->m_inputOperation = NULL; | ||||
| this->m_hueOperation = NULL; | |||||
| this->m_saturationOperation = NULL; | |||||
| this->m_valueOperation = NULL; | |||||
| } | } | ||||
| void ChangeHSVOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) | void ChangeHSVOperation::executePixelSampled(float output[4], float x, float y, PixelSampler sampler) | ||||
| { | { | ||||
| float inputColor1[4]; | float inputColor1[4]; | ||||
| float hue[4], saturation[4], value[4]; | |||||
| this->m_inputOperation->readSampled(inputColor1, x, y, sampler); | this->m_inputOperation->readSampled(inputColor1, x, y, sampler); | ||||
| this->m_hueOperation->readSampled(hue, x, y, sampler); | |||||
| this->m_saturationOperation->readSampled(saturation, x, y, sampler); | |||||
| this->m_valueOperation->readSampled(value, x, y, sampler); | |||||
| output[0] = inputColor1[0] + (this->m_hue - 0.5f); | output[0] = inputColor1[0] + (hue[0] - 0.5f); | ||||
| if (output[0] > 1.0f) output[0] -= 1.0f; | if (output[0] > 1.0f) output[0] -= 1.0f; | ||||
| else if (output[0] < 0.0f) output[0] += 1.0f; | else if (output[0] < 0.0f) output[0] += 1.0f; | ||||
| output[1] = inputColor1[1] * this->m_saturation; | output[1] = inputColor1[1] * saturation[0]; | ||||
| output[2] = inputColor1[2] * this->m_value; | output[2] = inputColor1[2] * value[0]; | ||||
| output[3] = inputColor1[3]; | output[3] = inputColor1[3]; | ||||
| } | } | ||||