DSDSWeb/static/js/Cesium-1.53/Source/Shaders/Builtin/Functions/vertexLogDepth.glsl

63 lines
1.4 KiB
Plaintext
Raw Normal View History

2024-07-11 18:02:47 +08:00
#ifdef LOG_DEPTH
varying float v_logZ;
#ifdef SHADOW_MAP
varying vec3 v_logPositionEC;
#endif
#endif
void czm_updatePositionDepth() {
#if defined(LOG_DEPTH) && !defined(DISABLE_GL_POSITION_LOG_DEPTH)
vec3 logPositionEC = (czm_inverseProjection * gl_Position).xyz;
#ifdef SHADOW_MAP
v_logPositionEC = logPositionEC;
#endif
#ifdef ENABLE_GL_POSITION_LOG_DEPTH_AT_HEIGHT
if (length(logPositionEC) < 2.0e6)
{
return;
}
#endif
gl_Position.z = log2(max(1e-6, 1.0 + gl_Position.w)) * czm_log2FarDistance - 1.0;
gl_Position.z *= gl_Position.w;
#endif
}
/**
* Writes the logarithmic depth to gl_Position using the already computed gl_Position.
*
* @name czm_vertexLogDepth
* @glslFunction
*/
void czm_vertexLogDepth()
{
#ifdef LOG_DEPTH
v_logZ = 1.0 + gl_Position.w;
czm_updatePositionDepth();
#endif
}
/**
* Writes the logarithmic depth to gl_Position using the provided clip coordinates.
* <p>
* An example use case for this function would be moving the vertex in window coordinates
* before converting back to clip coordinates. Use the original vertex clip coordinates.
* </p>
* @name czm_vertexLogDepth
* @glslFunction
*
* @param {vec4} clipCoords The vertex in clip coordinates.
*
* @example
* czm_vertexLogDepth(czm_projection * vec4(positionEyeCoordinates, 1.0));
*/
void czm_vertexLogDepth(vec4 clipCoords)
{
#ifdef LOG_DEPTH
v_logZ = 1.0 + clipCoords.w;
czm_updatePositionDepth();
#endif
}