X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcolorcurve.cpp;h=54fbc767bb77a75ce19356d446a7c38d13526b52;hp=78a7fc168f13439bcfbeb7f772e125cdd6519493;hb=HEAD;hpb=2ba5af95fb7341b0e6b212e28d03208c6747aae5 diff --git a/source/colorcurve.cpp b/source/colorcurve.cpp deleted file mode 100644 index 78a7fc16..00000000 --- a/source/colorcurve.cpp +++ /dev/null @@ -1,125 +0,0 @@ -#include -#include "color.h" -#include "colorcurve.h" -#include "mesh.h" -#include "renderer.h" -#include "shader.h" -#include "texture2d.h" - -using namespace std; - -namespace Msp { -namespace GL { - -ColorCurve::ColorCurve(): - shprog("colorcurve.glsl"), - quad(get_fullscreen_quad()) -{ - shdata.uniform("source", 0); - shdata.uniform("curve", 1); - - curve.storage(LUMINANCE8, 256, 1); - Sampler &sampler = curve.get_default_sampler(); - sampler.set_min_filter(LINEAR); - sampler.set_wrap(CLAMP_TO_EDGE); - texturing.attach(1, curve); - - set_exposure_adjust(0.0f); - set_brightness_response(0.4f); - set_linear(); -} - -void ColorCurve::set_exposure_adjust(float e) -{ - shdata.uniform("exposure", pow(2.0f, e)); -} - -void ColorCurve::set_brightness_response(float b) -{ - if(b<=0 || b>1) - throw invalid_argument("ColorCurve::set_brightness_response"); - float t = (b<1 ? pow(b, 1/(1-b)) : 0.0f); - shdata.uniform("brightness_response", b, t, pow(t, b)); -} - -void ColorCurve::set_gamma(float g) -{ - if(g<0.1 || g>10) - throw invalid_argument("ColorCurve::set_gamma"); - - unsigned char curve_data[256]; - for(unsigned i=0; i<256; ++i) - curve_data[i] = pow(i/255.0f, 1/g)*255+0.5f; - curve.image(0, curve_data); -} - -void ColorCurve::set_srgb() -{ - unsigned char curve_data[256]; - curve_data[0] = 0; - for(unsigned i=1; i<256; ++i) - curve_data[i] = to_srgb(i/255.0f)*255+0.5f; - curve.image(0, curve_data); -} - -void ColorCurve::set_linear() -{ - unsigned char curve_data[256]; - for(unsigned i=0; i<256; ++i) - curve_data[i] = i; - curve.image(0, curve_data); -} - -void ColorCurve::render(Renderer &renderer, const Texture2D &color_buf, const Texture2D &) -{ - texturing.attach(0, color_buf); - - Renderer::Push push(renderer); - renderer.set_shader_program(&shprog, &shdata); - renderer.set_texturing(&texturing); - quad.draw(renderer); -} - - -ColorCurve::Template::Template(): - exposure_adjust(0.0f), - brightness_response(0.4f), - gamma(1.0f), - srgb(false) -{ } - -ColorCurve *ColorCurve::Template::create(unsigned, unsigned) const -{ - RefPtr colorcurve = new ColorCurve; - colorcurve->set_exposure_adjust(exposure_adjust); - colorcurve->set_brightness_response(brightness_response); - if(srgb) - colorcurve->set_srgb(); - else - colorcurve->set_gamma(gamma); - return colorcurve.release(); -} - - -ColorCurve::Template::Loader::Loader(Template &t): - DataFile::DerivedObjectLoader(t) -{ - add("brightness_response", &Template::brightness_response); - add("exposure_adjust", &Template::exposure_adjust); - add("gamma", &Loader::gamma); - add("srgb", &Loader::srgb); -} - -void ColorCurve::Template::Loader::gamma(float g) -{ - obj.gamma = g; - obj.srgb = false; -} - -void ColorCurve::Template::Loader::srgb() -{ - obj.srgb = true; -} - -} // namespace GL -} // namespace Msp