[vert.glsl] #version 120 varying vec2 pass_TexCoord; void main() { gl_Position = gl_Vertex; pass_TexCoord = vec2(0.5, 0.5) + 0.5 * gl_Vertex.xy; } [frag.glsl] #version 120 varying vec2 pass_TexCoord; uniform sampler2D source; uniform sampler2D buffer; uniform vec2 mix; void main(void) { vec4 old_color = texture2D(buffer, pass_TexCoord); vec4 new_color = texture2D(source, pass_TexCoord); /* The old way */ //gl_FragColor = new_color * mix.x + old_color * mix.y; /* The new way: if new_color > old_color we want faster updates */ gl_FragColor = max(new_color, new_color * mix.x + old_color * mix.y); }