diff options
author | Jeroen Bakker <j.bakker@atmind.nl> | 2012-06-14 07:11:36 +0400 |
---|---|---|
committer | Jeroen Bakker <j.bakker@atmind.nl> | 2012-06-14 07:11:36 +0400 |
commit | fac417a3baf132e7d04540e1fbdefe7d3a1fa17b (patch) | |
tree | e167461558b6b239a12a16fefe16df5faeba2137 /source/blender/compositor/operations | |
parent | cc82653b728408d5e30524549a419fe20fa6a967 (diff) |
Fixed glares
Diffstat (limited to 'source/blender/compositor/operations')
6 files changed, 112 insertions, 7 deletions
diff --git a/source/blender/compositor/operations/COM_GlareFogGlowOperation.cpp b/source/blender/compositor/operations/COM_GlareFogGlowOperation.cpp index 4acc8aa17f0..1bdbdf71bdc 100644 --- a/source/blender/compositor/operations/COM_GlareFogGlowOperation.cpp +++ b/source/blender/compositor/operations/COM_GlareFogGlowOperation.cpp @@ -322,7 +322,7 @@ void convolve(float* dst, MemoryBuffer* in1, MemoryBuffer* in2) memset(data2, 0, w2*h2*sizeof(fREAL)); for (y=0; y<ybsz; y++) { int yy = ybl*ybsz + y; - if (yy >= kernelHeight) continue; + if (yy >= imageHeight) continue; fp = &data2[y*w2]; colp = (fRGB*)&imageBuffer[yy*imageWidth*COM_NUMBER_OF_CHANNELS]; for (x=0; x<xbsz; x++) { diff --git a/source/blender/compositor/operations/COM_GlareGhostOperation.cpp b/source/blender/compositor/operations/COM_GlareGhostOperation.cpp index 9bf39db2727..2d5fe57b817 100644 --- a/source/blender/compositor/operations/COM_GlareGhostOperation.cpp +++ b/source/blender/compositor/operations/COM_GlareGhostOperation.cpp @@ -113,7 +113,7 @@ void GlareGhostOperation::generateGlare(float *data, MemoryBuffer *inputTile, No sm = smoothMask(s, t) * 0.25f; fRGB_madd(tc, c, sm); } - tbuf1->writePixel(x, y, tc); + tbuf1->addPixel(x, y, tc); } if (isBreaked()) breaked = true; } diff --git a/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp b/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp index ea76e7551ad..f9b2ec2b32d 100644 --- a/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp +++ b/source/blender/compositor/operations/COM_GlareThresholdOperation.cpp @@ -25,10 +25,18 @@ GlareThresholdOperation::GlareThresholdOperation() : NodeOperation() { - this->addInputSocket(COM_DT_COLOR); + this->addInputSocket(COM_DT_COLOR, COM_SC_FIT); this->addOutputSocket(COM_DT_COLOR); this->inputProgram = NULL; } + +void GlareThresholdOperation::determineResolution(unsigned int resolution[], unsigned int preferredResolution[]) +{ + NodeOperation::determineResolution(resolution, preferredResolution); + resolution[0] = resolution[0] / (1 << settings->quality); + resolution[1] = resolution[1] / (1 << settings->quality); +} + void GlareThresholdOperation::initExecution() { this->inputProgram = this->getInputSocketReader(0); @@ -36,6 +44,8 @@ void GlareThresholdOperation::initExecution() void GlareThresholdOperation::executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) { + const float threshold = settings->threshold; + this->inputProgram->read(color, x, y, sampler, inputBuffers); if (rgb_to_luma_y(color) >= threshold) { color[0] -= threshold, color[1] -= threshold, color[2] -= threshold; diff --git a/source/blender/compositor/operations/COM_GlareThresholdOperation.h b/source/blender/compositor/operations/COM_GlareThresholdOperation.h index d5ec8ba93a6..70692565e27 100644 --- a/source/blender/compositor/operations/COM_GlareThresholdOperation.h +++ b/source/blender/compositor/operations/COM_GlareThresholdOperation.h @@ -32,8 +32,10 @@ private: */ SocketReader *inputProgram; - float threshold; - + /** + * @brief settings of the glare node. + */ + NodeGlare *settings; public: GlareThresholdOperation(); @@ -52,8 +54,10 @@ public: */ void deinitExecution(); - void setThreshold(float threshold) { - this->threshold = threshold; + void setGlareSettings(NodeGlare *settings) { + this->settings = settings; } + + void determineResolution(unsigned int resolution[], unsigned int preferredResolution[]); }; #endif diff --git a/source/blender/compositor/operations/COM_MixGlareOperation.cpp b/source/blender/compositor/operations/COM_MixGlareOperation.cpp new file mode 100644 index 00000000000..229fc1e5313 --- /dev/null +++ b/source/blender/compositor/operations/COM_MixGlareOperation.cpp @@ -0,0 +1,46 @@ +/* + * Copyright 2011, Glareer Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor: + * Jeroen Bakker + * Monique Dewanchand + */ + +#include "COM_MixGlareOperation.h" + +MixGlareOperation::MixGlareOperation(): MixBaseOperation() +{ +} + +void MixGlareOperation::executePixel(float *outputValue, float x, float y, PixelSampler sampler, MemoryBuffer *inputBuffers[]) +{ + float inputColor1[4]; + float inputColor2[4]; + float inputValue[4]; + float value; + + inputValueOperation->read(inputValue, x, y, sampler, inputBuffers); + inputColor1Operation->read(inputColor1, x, y, sampler, inputBuffers); + inputColor2Operation->read(inputColor2, x, y, sampler, inputBuffers); + value = inputValue[0]; + float mf = 2.f - 2.f*fabsf(value - 0.5f); + + outputValue[0] = mf*((inputColor1[0])+value*(inputColor2[0]-inputColor1[0])); + outputValue[1] = mf*((inputColor1[1])+value*(inputColor2[1]-inputColor1[1])); + outputValue[2] = mf*((inputColor1[2])+value*(inputColor2[2]-inputColor1[2])); + outputValue[3] = inputColor1[3]; +} diff --git a/source/blender/compositor/operations/COM_MixGlareOperation.h b/source/blender/compositor/operations/COM_MixGlareOperation.h new file mode 100644 index 00000000000..1a025eb3edd --- /dev/null +++ b/source/blender/compositor/operations/COM_MixGlareOperation.h @@ -0,0 +1,45 @@ +/* + * Copyright 2011, Glareer Foundation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * Contributor: + * Jeroen Bakker + * Monique Dewanchand + */ + +#ifndef _COM_MixGlareOperation_h +#define _COM_MixGlareOperation_h +#include "COM_MixBaseOperation.h" + + +/** + * this program converts an input colour to an output value. + * it assumes we are in sRGB colour space. + */ +class MixGlareOperation : public MixBaseOperation { +public: + /** + * Default constructor + */ + MixGlareOperation(); + + /** + * the inner loop of this program + */ + void executePixel(float *color, float x, float y, PixelSampler sampler, MemoryBuffer * inputBuffers[]); + +}; +#endif |