X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcolorcurve.cpp;h=f1c090308458b4edbf9360d5018a80d817389471;hb=0807680edd94a7f14560831db4dd52e4e48d0d19;hp=81b5a43e7a6ef4d6724a39e2ea182e7ecd63586a;hpb=d1e3975c163694d7bca6417463462be950019e5e;p=libs%2Fgl.git diff --git a/source/colorcurve.cpp b/source/colorcurve.cpp index 81b5a43e..f1c09030 100644 --- a/source/colorcurve.cpp +++ b/source/colorcurve.cpp @@ -23,23 +23,31 @@ ColorCurve::ColorCurve(): curve.set_wrap(CLAMP_TO_EDGE); texturing.attach(1, curve); - set_peak(0.2); - set_brightness(1.5); + set_exposure_adjust(0.0f); + set_brightness_response(0.4f); set_linear(); } -void ColorCurve::set_peak(float p) +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_peak(float) { - if(p<0 || p>1) - throw invalid_argument("ColorCurve::set_peak"); - shdata.uniform("peak", p); } void ColorCurve::set_brightness(float b) { - if(b<1) - throw invalid_argument("ColorCurve::set_brightness"); - shdata.uniform("brightness", b); + set_brightness_response(1/b); } void ColorCurve::set_gamma(float g)