[vert.glsl] #version 120 void main() { gl_Position = gl_Vertex; gl_TexCoord[0] = gl_MultiTexCoord0; } [frag.glsl] #version 120 uniform sampler2D source; uniform sampler2D buffer; uniform vec2 mix; void main(void) { vec4 old_color = texture2D(buffer, gl_TexCoord[0].xy); vec4 new_color = texture2D(source, gl_TexCoord[0].xy); /* 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); }