UNPKG

playcanvas

Version:

PlayCanvas WebGL game engine

4 lines (2 loc) 1.76 kB
var screenDepthPS = "\nuniform highp sampler2D uSceneDepthMap;\n#ifndef SCREENSIZE\n#define SCREENSIZE\nuniform vec4 uScreenSize;\n#endif\n#ifndef VIEWMATRIX\n#define VIEWMATRIX\nuniform mat4 matrix_view;\n#endif\n#ifndef LINEARIZE_DEPTH\n#ifndef CAMERAPLANES\n#define CAMERAPLANES\nuniform vec4 camera_params;\n#endif\n#define LINEARIZE_DEPTH\nfloat linearizeDepth(float z) {\n if (camera_params.w == 0.0)\n return (camera_params.z * camera_params.y) / (camera_params.y + z * (camera_params.z - camera_params.y));\n else\n return camera_params.z + z * (camera_params.y - camera_params.z);\n}\n#endif\nfloat delinearizeDepth(float linearDepth) {\n if (camera_params.w == 0.0) {\n return (camera_params.y * (camera_params.z - linearDepth)) / (linearDepth * (camera_params.z - camera_params.y));\n } else {\n return (linearDepth - camera_params.z) / (camera_params.y - camera_params.z);\n }\n}\nfloat getLinearScreenDepth(vec2 uv) {\n #ifdef SCENE_DEPTHMAP_LINEAR\n #ifdef SCENE_DEPTHMAP_FLOAT\n return texture2D(uSceneDepthMap, uv).r;\n #else\n ivec2 textureSize = textureSize(uSceneDepthMap, 0);\n ivec2 texel = ivec2(uv * vec2(textureSize));\n vec4 data = texelFetch(uSceneDepthMap, texel, 0);\n uint intBits = \n (uint(data.r * 255.0) << 24u) |\n (uint(data.g * 255.0) << 16u) |\n (uint(data.b * 255.0) << 8u) |\n uint(data.a * 255.0);\n return uintBitsToFloat(intBits);\n #endif\n #else\n return linearizeDepth(texture2D(uSceneDepthMap, uv).r);\n #endif\n}\n#ifndef VERTEXSHADER\nfloat getLinearScreenDepth() {\n vec2 uv = gl_FragCoord.xy * uScreenSize.zw;\n return getLinearScreenDepth(uv);\n}\n#endif\nfloat getLinearDepth(vec3 pos) {\n return -(matrix_view * vec4(pos, 1.0)).z;\n}\n"; export { screenDepthPS as default };