Files
vimix/ImageProcessingShader.cpp
brunoherbelin 551acf25b9 New Shader Image Processing
Cleanup shaders and add image processing shader for source
2020-04-25 23:58:49 +02:00

69 lines
1.9 KiB
C++

#include "defines.h"
#include "Visitor.h"
#include "Log.h"
#include "ImageProcessingShader.h"
ShadingProgram imageProcessingShadingProgram("shaders/image.vs", "shaders/imageprocessing.fs");
ImageProcessingShader::ImageProcessingShader()
{
program_ = &imageProcessingShadingProgram;
reset();
}
void ImageProcessingShader::use()
{
Shader::use();
program_->setUniform("iChannelResolution[0]", iChannelResolution[0].x, iChannelResolution[0].y, iChannelResolution[0].z);
program_->setUniform("iChannelResolution[1]", iChannelResolution[1].x, iChannelResolution[1].y, iChannelResolution[1].z);
program_->setUniform("brightness", brightness);
program_->setUniform("contrast", contrast);
program_->setUniform("saturation", saturation);
program_->setUniform("hueshift", hueshift);
program_->setUniform("threshold", threshold);
program_->setUniform("lumakey", lumakey);
program_->setUniform("nbColors", nbColors);
program_->setUniform("invert", invert);
program_->setUniform("filter", filter);
program_->setUniform("gamma", gamma);
program_->setUniform("levels", levels);
program_->setUniform("chromakey", chromakey);
program_->setUniform("chromadelta", chromadelta);
}
void ImageProcessingShader::reset()
{
Shader::reset();
// no texture resolution yet
iChannelResolution[0] = glm::vec3(1.f);
iChannelResolution[1] = glm::vec3(1.f);
// default values for image processing
brightness = 0.f;
contrast = 0.f;
saturation = 0.f;
hueshift = 0.f;
threshold = 0.f;
lumakey = 0.f;
nbColors = 0;
invert = 0;
filter = 0;
gamma = glm::vec4(1.f, 1.f, 1.f, 1.f);
levels = glm::vec4(0.f, 1.f, 0.f, 1.f);
chromakey = glm::vec4(0.f, 1.f, 0.f, 0.f);
chromadelta = 0.f;
}
void ImageProcessingShader::accept(Visitor& v) {
Shader::accept(v);
v.visit(*this);
}