X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcolorcurve.cpp;fp=source%2Fcolorcurve.cpp;h=ad2c51ca337f35340974226253e706a58f58b088;hp=1c76e1eb885ddbc284d13d7510d588e25a66e620;hb=e55f79ccb21e8c1be3d86f127e3ec1583e58ce92;hpb=b2764a3a349b48d7445202faa903383386c09a4c diff --git a/source/colorcurve.cpp b/source/colorcurve.cpp index 1c76e1eb..ad2c51ca 100644 --- a/source/colorcurve.cpp +++ b/source/colorcurve.cpp @@ -7,48 +7,14 @@ using namespace std; -namespace { - -static const char fragment_src[] = - "uniform sampler2D texture;\n" - "uniform sampler1D curve;\n" - "uniform float peak;\n" - "uniform float brightness;\n" - "varying vec2 texcoord;\n" - "void main()\n" - "{\n" - " vec4 sample = texture2D(texture, texcoord);\n" - " float maxc = max(sample.r, max(sample.g, sample.b));\n" - " if(maxc>1.0-peak)\n" - " {\n" - " vec3 saturated = sample.rgb/maxc;\n" - " if(maxc>1.0+peak)\n" - " {\n" - " sample.rgb = mix(vec3(1.0), saturated, 1.0/pow(brightness, maxc-1.0-peak));\n" - " }\n" - " else\n" - " {\n" - " float x = (1.0+peak-maxc)/(2.0*peak);\n" - " sample.rgb = saturated.rgb*(1.0-peak+(1.0-x*x)*peak);\n" - " }\n" - " }\n" - " gl_FragColor = vec4(texture1D(curve, sample.r).r, texture1D(curve, sample.g).r, texture1D(curve, sample.b).r, sample.a);\n" - "}"; - -} - namespace Msp { namespace GL { ColorCurve::ColorCurve(): + shprog("colorcurve.glsl"), quad(get_fullscreen_quad()) { - shprog.attach_shader(get_fullscreen_vertex_shader()); - shprog.attach_shader_owned(new FragmentShader(fragment_src)); - shprog.bind_attribute(get_component_type(VERTEX2), "vertex"); - shprog.link(); - - shdata.uniform("texture", 0); + shdata.uniform("source", 0); shdata.uniform("curve", 1); curve.storage(LUMINANCE, 256);