Advertisement
Guest User

Untitled

a guest
Aug 31st, 2015
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. uniform sampler2D shadow_map;
  2. varying vec2 vert;
  3.  
  4.  
  5. vec4 pack(float depth)
  6. {
  7.     const vec4 bitSh = vec4(256.0 * 256.0 * 256.0,
  8.                        256.0 * 256.0,
  9.                        256.0,
  10.                       1.0);
  11.     const vec4 bitMsk = vec4(0,
  12.                          1.0 / 256.0,
  13.                          1.0 / 256.0,
  14.                              1.0 / 256.0);
  15.     vec4 comp = fract(depth * bitSh);
  16.        
  17. //    fract returns the fractional part of x. This is calculated as x - floor(x).
  18.     comp -= comp.xxyz * bitMsk;
  19.     return comp;
  20. }
  21.  
  22.  
  23.  
  24. float unpack(vec4 packedZValue)
  25. {
  26.     const vec4 bitShifts = vec4(1.0 / (256.0 * 256.0 * 256.0),
  27.                         1.0 / (256.0 * 256.0),
  28.                         1.0 / 256.0,
  29.                         1.0);
  30.     float shadow = dot(packedZValue, bitShifts);
  31.  
  32.     return shadow;
  33. }
  34.  
  35. //float Lerp(float a, float b, float x)     { return a + x * (b - a); }
  36.  
  37. float bilinearInterpolation(float x, float y)
  38. {
  39.    
  40.     float texdm = 1.0 / 512.0;
  41.     float ix = float(int(x));
  42.     float iy = float(int(y));
  43.  
  44.     float ix1 = ix;
  45.     float ix2 = ix+texdm;
  46.  
  47.     float iy1 = iy;
  48.     float iy2 = iy+texdm;
  49.  
  50.  
  51.     float cix2 = ix2;
  52.     float ciy2 = iy2;
  53.  
  54.  
  55.     float FQ11 = unpack(texture2D( shadow_map, vec2(ix1, iy1)));
  56.     float FQ21 = unpack(texture2D( shadow_map, vec2(cix2, iy1)));
  57.     float FQ12 = unpack(texture2D( shadow_map, vec2(ix1, ciy2)));
  58.     float FQ22 = unpack(texture2D( shadow_map, vec2(cix2, ciy2)));
  59.    
  60. float denom = ix2 - ix1;
  61.  
  62.     float fxy1 = ( (ix2 - x) / denom) * FQ11 + ( (x - ix1) / denom ) * FQ21;
  63.     float fxy2 = ( (ix2 - x) / denom) * FQ12 + ( (x - ix1) / denom ) * FQ22;
  64.  
  65.     float denom2 = (iy2 - iy1);
  66.     if (denom2 == 0.0) return 0.0;
  67.    
  68. float a = ( (iy2 - y) / denom2) * fxy1;
  69. float b = ( (y - iy1) / denom2) * fxy2;
  70.  
  71.     return a + b;
  72.  
  73.     //return 1.0;
  74. }
  75.  
  76.  
  77. void main()
  78. {
  79. vec2 texpos = vert*0.5 + 0.5;
  80. float new_val = bilinearInterpolation(texpos.x, texpos.y);
  81. //float new_val = unpack(texture2D( shadow_map, vert*0.5+0.5));
  82. gl_FragColor = pack(new_val);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement