X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Feffects%2Fcolorcurve.cpp;h=ac1ed9aa64bac9d50b3910c14c0356658afd782b;hb=f1e296bb2442dfbea12e7b38a97cc152aa34569c;hp=8811b065fd3b6f0dddddd86a8e091e08d97bc224;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/effects/colorcurve.cpp b/source/effects/colorcurve.cpp index 8811b065..ac1ed9aa 100644 --- a/source/effects/colorcurve.cpp +++ b/source/effects/colorcurve.cpp @@ -3,7 +3,7 @@ #include "colorcurve.h" #include "mesh.h" #include "renderer.h" -#include "shader.h" +#include "resources.h" #include "texture2d.h" using namespace std; @@ -12,16 +12,12 @@ namespace Msp { namespace GL { ColorCurve::ColorCurve(): - shprog("colorcurve.glsl"), - quad(get_fullscreen_quad()), - linear_sampler(get_linear_sampler()), - nearest_sampler(get_nearest_sampler()) + shprog(Resources::get_global().get("_colorcurve.glsl.shader")), + quad(Resources::get_global().get("_fullscreen_quad.mesh")), + linear_sampler(Resources::get_global().get("_linear_clamp.samp")), + nearest_sampler(Resources::get_global().get("_nearest_clamp.samp")) { - shdata.uniform("source", 0); - shdata.uniform("curve", 1); - curve.storage(LUMINANCE8, 256, 1); - texturing.attach(1, curve, linear_sampler.get()); set_exposure_adjust(0.0f); set_brightness_response(0.4f); @@ -37,6 +33,7 @@ void ColorCurve::set_brightness_response(float b) { if(b<=0 || b>1) throw invalid_argument("ColorCurve::set_brightness_response"); + // Calculate an offset value to obtain a derivative of 1 at zero intensity. float t = (b<1 ? pow(b, 1/(1-b)) : 0.0f); shdata.uniform("brightness_response", b, t, pow(t, b)); } @@ -71,25 +68,29 @@ void ColorCurve::set_linear() void ColorCurve::render(Renderer &renderer, const Texture2D &color_buf, const Texture2D &) { - texturing.attach(0, color_buf, nearest_sampler.get()); - Renderer::Push push(renderer); + renderer.set_pipeline_key(this); + renderer.clear(0); renderer.set_shader_program(&shprog, &shdata); - renderer.set_texturing(&texturing); - quad->draw(renderer); + renderer.set_texture("source", &color_buf, &nearest_sampler); + renderer.set_texture("curve", &curve, &linear_sampler); + quad.draw(renderer); } +void ColorCurve::set_debug_name(const string &name) +{ +#ifdef DEBUG + shdata.set_debug_name(name+" [UBO]"); + curve.set_debug_name(name+"/curve.tex"); +#else + (void)name; +#endif +} -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; + RefPtr colorcurve = new ColorCurve(); colorcurve->set_exposure_adjust(exposure_adjust); colorcurve->set_brightness_response(brightness_response); if(srgb)