2 * Copyright 2011, Blender Foundation.
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
23 #include "COM_MixSaturationOperation.h"
29 MixSaturationOperation::MixSaturationOperation() : MixBaseOperation()
34 void MixSaturationOperation::executePixel(float output[4], float x, float y, PixelSampler sampler)
40 this->m_inputValueOperation->read(&value, x, y, sampler);
41 this->m_inputColor1Operation->read(&inputColor1[0], x, y, sampler);
42 this->m_inputColor2Operation->read(&inputColor2[0], x, y, sampler);
44 if (this->useValueAlphaMultiply()) {
45 value *= inputColor2[3];
47 float valuem = 1.0f - value;
50 rgb_to_hsv(inputColor1[0], inputColor1[1], inputColor1[2], &rH, &rS, &rV);
52 float colH, colS, colV;
53 rgb_to_hsv(inputColor2[0], inputColor2[1], inputColor2[2], &colH, &colS, &colV);
54 hsv_to_rgb(rH, (valuem * rS + value * colS), rV, &output[0], &output[1], &output[2]);
56 copy_v3_v3(output, inputColor1);
59 output[3] = inputColor1[3];
61 clampIfNeeded(output);