71 lines
2 KiB
GLSL
71 lines
2 KiB
GLSL
// Compute the pixelwise diff between two textures, one row at a time.
|
|
// Assumes both images are not transparent.
|
|
// Warning: Only works on rows <= ((2**8)**4)/255 = 16843009
|
|
|
|
// try isampler2D, ivec4 etc.? Probably not
|
|
uniform vec2 size;
|
|
uniform bool horizontal;
|
|
// uniform vec2 offs;
|
|
uniform sampler2D base;
|
|
uniform sampler2D curr;
|
|
|
|
void main(void)
|
|
{
|
|
// calculate total diff of row in either direction
|
|
float total = 0.0;
|
|
|
|
if (horizontal) {
|
|
float posy = gl_FragCoord.y/size.y;
|
|
for (float x=0.0; x<=1.0; x+=(1.0/size.x)) {
|
|
vec4 color = texture2D(curr, vec2(x, posy));
|
|
vec4 basecolor = texture2D(base, vec2(x, 1.0-posy));
|
|
color.rgb = abs(color.rgb - basecolor.rgb);
|
|
total = total + color.r + color.g + color.b;
|
|
}
|
|
} else {
|
|
float posx = gl_FragCoord.x/size.x;
|
|
for (float y=0.0; y<=1.0; y+=(1.0/size.y)) {
|
|
vec4 color = texture2D(curr, vec2(posx, y));
|
|
vec4 basecolor = texture2D(base, vec2(posx, 1.0-y));
|
|
color.rgb = abs(color.rgb - basecolor.rgb);
|
|
total = total + color.r + color.g + color.b;
|
|
}
|
|
}
|
|
|
|
// encode to rgba channels in current pixel
|
|
vec4 col = vec4(0.0, 0.0, 0.0, 1.0);
|
|
// total = total/200.0;
|
|
col.r = mod(total, 256.0/255.0);
|
|
col.g = mod(total/256.0, 256.0/255.0);
|
|
col.b = mod(total/65536.0, 256.0/255.0);
|
|
// color.g = 0.0;
|
|
// color.b = 0.0;
|
|
// color.g = mod(total, 256.0/255.0);
|
|
// color.r = float(mod(total, 256))/255.0;
|
|
// total = total/256;
|
|
// color.r = 1.0/255.0;
|
|
// color.r = mod(total, 256.0/255.0);
|
|
// total = (total - color.r) / (256.0/255.0);
|
|
// color.g = mod(total, 256.0/255.0); total = (total - color.g) / (256.0/255.0);
|
|
// color.b = mod(total, 256.0/255.0);
|
|
// color.a = 1.0;
|
|
|
|
// color.r = 0;
|
|
|
|
gl_FragColor = col;
|
|
// color.a = mod(total, 256.0/255.0);
|
|
|
|
// gl_FragColor = vec4(0.0, 1.0, 1.0, 1.0);
|
|
}
|
|
|
|
/*
|
|
void main(void)
|
|
{
|
|
vec2 pos = gl_FragCoord.xy/size;
|
|
vec4 color = texture2D(curr, pos);
|
|
pos.y = 1.0 - pos.y;
|
|
vec4 basecolor = texture2D(base, pos);
|
|
color.rgb = abs(color.rgb - basecolor.rgb);
|
|
gl_FragColor = color;
|
|
}
|
|
*/
|