Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uniform sampler2D shadow_map;
- varying vec2 vert;
- vec4 pack(float depth)
- {
- const vec4 bitSh = vec4(256.0 * 256.0 * 256.0,
- 256.0 * 256.0,
- 256.0,
- 1.0);
- const vec4 bitMsk = vec4(0,
- 1.0 / 256.0,
- 1.0 / 256.0,
- 1.0 / 256.0);
- vec4 comp = fract(depth * bitSh);
- // fract returns the fractional part of x. This is calculated as x - floor(x).
- comp -= comp.xxyz * bitMsk;
- return comp;
- }
- float unpack(vec4 packedZValue)
- {
- const vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),
- 1.0 / (256.0 * 256.0),
- 1.0 / 256.0,
- 1.0);
- float shadow = dot(packedZValue, bitShifts);
- return shadow;
- }
- //float Lerp(float a, float b, float x) { return a + x * (b - a); }
- float bilinearInterpolation(float x, float y)
- {
- float texdm = 1.0 / 512.0;
- float ix = float(int(x));
- float iy = float(int(y));
- float ix1 = ix;
- float ix2 = ix+texdm;
- float iy1 = iy;
- float iy2 = iy+texdm;
- float cix2 = ix2;
- float ciy2 = iy2;
- float FQ11 = unpack(texture2D( shadow_map, vec2(ix1, iy1)));
- float FQ21 = unpack(texture2D( shadow_map, vec2(cix2, iy1)));
- float FQ12 = unpack(texture2D( shadow_map, vec2(ix1, ciy2)));
- float FQ22 = unpack(texture2D( shadow_map, vec2(cix2, ciy2)));
- float denom = ix2 - ix1;
- float fxy1 = ( (ix2 - x) / denom) * FQ11 + ( (x - ix1) / denom ) * FQ21;
- float fxy2 = ( (ix2 - x) / denom) * FQ12 + ( (x - ix1) / denom ) * FQ22;
- float denom2 = (iy2 - iy1);
- if (denom2 == 0.0) return 0.0;
- float a = ( (iy2 - y) / denom2) * fxy1;
- float b = ( (y - iy1) / denom2) * fxy2;
- return a + b;
- //return 1.0;
- }
- void main()
- {
- vec2 texpos = vert*0.5 + 0.5;
- float new_val = bilinearInterpolation(texpos.x, texpos.y);
- //float new_val = unpack(texture2D( shadow_map, vert*0.5+0.5));
- gl_FragColor = pack(new_val);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement