[osg-users] blending with shader

Gianni Ambrosio g.ambrosio+osg at gmail.com
Fri Nov 11 07:19:05 PST 2016

Hi David,
thanks it works!

Here are my vertex and fragment shaders:


varying vec2 texCoord;

void main(void)
   gl_Position = ftransform();
   texCoord = gl_MultiTexCoord0.xy;


uniform float width;
uniform float height;
uniform float gamma;
uniform sampler2D sceneTexture;
uniform sampler2D blendTexture;
uniform sampler2D blackTexture;

varying vec2 texCoord;

void main(void) {
   vec4 sceneColor = texture2D(sceneTexture, texCoord);
   vec2 fragCoord = vec2(gl_FragCoord.x/width, gl_FragCoord.y/height);
   vec4 blendColor = texture2D(blendTexture, fragCoord);
   vec4 blackColor = texture2D(blackTexture, fragCoord);
   vec4 gammaVector = vec4(gamma, gamma, gamma, 1.0);
   gl_FragColor = pow(pow(sceneColor*blendColor, gammaVector) * (1.0 - pow(blackColor, gammaVector)) + pow(blackColor, gammaVector), 1.0/gammaVector);

I had to use fragCoord for blending images because those images must not be distorted.
Is that code correct? I mean, it works but maybe there is a cleaner way to implement that. In particulare, is there a way to avoid passing "width' and "height" variables to the shader?


Read this topic online here:

More information about the osg-users mailing list