1234567891011121314151617181920212223242526272829303132333435363738 |
- #ifdef GL_ES
- precision mediump float;
- #endif
- vec4 pack(float depth)
- {
- const vec4 bitOffset = vec4(255. * 255. * 255., 255. * 255., 255., 1.);
- const vec4 bitMask = vec4(0., 1. / 255., 1. / 255., 1. / 255.);
-
- vec4 comp = fract(depth * bitOffset);
- comp -= comp.xxyz * bitMask;
-
- return comp;
- }
- // Thanks to http://devmaster.net/
- vec2 packHalf(float depth)
- {
- const vec2 bitOffset = vec2(1.0 / 255., 0.);
- vec2 color = vec2(depth, fract(depth * 255.));
- return color - (color.yy * bitOffset);
- }
- #ifndef VSM
- varying vec4 vPosition;
- #endif
- void main(void)
- {
- #ifdef VSM
- float moment1 = gl_FragCoord.z / gl_FragCoord.w;
- float moment2 = moment1 * moment1;
- gl_FragColor = vec4(packHalf(moment1), packHalf(moment2));
- #else
- gl_FragColor = pack(vPosition.z / vPosition.w);
- #endif
- }
|