shadowMap.fragment.fx 980 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #ifdef GL_ES
  2. precision highp float;
  3. #endif
  4. vec4 pack(float depth)
  5. {
  6. const vec4 bitOffset = vec4(255. * 255. * 255., 255. * 255., 255., 1.);
  7. const vec4 bitMask = vec4(0., 1. / 255., 1. / 255., 1. / 255.);
  8. vec4 comp = mod(depth * bitOffset * vec4(254.), vec4(255.)) / vec4(254.);
  9. comp -= comp.xxyz * bitMask;
  10. return comp;
  11. }
  12. // Thanks to http://devmaster.net/
  13. vec2 packHalf(float depth)
  14. {
  15. const vec2 bitOffset = vec2(1.0 / 255., 0.);
  16. vec2 color = vec2(depth, fract(depth * 255.));
  17. return color - (color.yy * bitOffset);
  18. }
  19. #ifndef VSM
  20. varying vec4 vPosition;
  21. #endif
  22. #ifdef ALPHATEST
  23. varying vec2 vUV;
  24. uniform sampler2D diffuseSampler;
  25. #endif
  26. void main(void)
  27. {
  28. #ifdef ALPHATEST
  29. if (texture2D(diffuseSampler, vUV).a < 0.4)
  30. discard;
  31. #endif
  32. #ifdef VSM
  33. float moment1 = gl_FragCoord.z / gl_FragCoord.w;
  34. float moment2 = moment1 * moment1;
  35. gl_FragColor = vec4(packHalf(moment1), packHalf(moment2));
  36. #else
  37. gl_FragColor = pack(vPosition.z / vPosition.w);
  38. #endif
  39. }