shadowMap.fragment.fx 843 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #ifdef GL_ES
  2. precision mediump 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. ),
  9. vec4( 255. ) ) / vec4( 254. );
  10. comp -= comp.xxyz * bitMask;
  11. return comp;
  12. }
  13. // Thanks to http://devmaster.net/
  14. vec2 packHalf(float depth)
  15. {
  16. const vec2 bitOffset = vec2(1.0 / 255., 0.);
  17. vec2 color = vec2(depth, fract(depth * 255.));
  18. return color - (color.yy * bitOffset);
  19. }
  20. #ifndef VSM
  21. varying vec4 vPosition;
  22. #endif
  23. void main(void)
  24. {
  25. #ifdef VSM
  26. float moment1 = gl_FragCoord.z / gl_FragCoord.w;
  27. float moment2 = moment1 * moment1;
  28. gl_FragColor = vec4(packHalf(moment1), packHalf(moment2));
  29. #else
  30. gl_FragColor = pack(vPosition.z / vPosition.w);
  31. #endif
  32. }