1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #ifdef LOG_DEPTH
- varying float v_depthFromNearPlusOne;
- #ifdef POLYGON_OFFSET
- uniform vec2 u_polygonOffset;
- #endif
- #endif
- /**
- * Writes the fragment depth to the logarithmic depth buffer.
- * <p>
- * Use this when the vertex shader does not call {@link czm_vertexlogDepth}, for example, when
- * ray-casting geometry using a full screen quad.
- * </p>
- * @name czm_writeLogDepth
- * @glslFunction
- *
- * @param {float} depth The depth coordinate, where 1.0 is on the near plane and
- * depth increases in eye-space units from there
- *
- * @example
- * czm_writeLogDepth((czm_projection * v_positionEyeCoordinates).w + 1.0);
- */
- void czm_writeLogDepth(float depth)
- {
- #if defined(GL_EXT_frag_depth) && defined(LOG_DEPTH)
- // Discard the vertex if it's not between the near and far planes.
- // We allow a bit of epsilon on the near plane comparison because a 1.0
- // from the vertex shader (indicating the vertex should be _on_ the near
- // plane) will not necessarily come here as exactly 1.0.
- if (depth <= 0.9999999 || depth > czm_farDepthFromNearPlusOne) {
- discard;
- }
- #ifdef POLYGON_OFFSET
- // Polygon offset: m * factor + r * units
- float factor = u_polygonOffset[0];
- float units = u_polygonOffset[1];
- // If we can't compute derivatives, just leave out the factor I guess?
- #ifdef GL_OES_standard_derivatives
- // m = sqrt(dZdX^2 + dZdY^2);
- float x = dFdx(depth);
- float y = dFdy(depth);
- float m = sqrt(x * x + y * y);
- // Apply the factor before computing the log depth.
- depth += m * factor;
- #endif
- #endif
- gl_FragDepthEXT = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;
- #ifdef POLYGON_OFFSET
- // Apply the units after the log depth.
- gl_FragDepthEXT += czm_epsilon7 * units;
- #endif
- #endif
- }
- /**
- * Writes the fragment depth to the logarithmic depth buffer.
- * <p>
- * Use this when the vertex shader calls {@link czm_vertexlogDepth}.
- * </p>
- *
- * @name czm_writeLogDepth
- * @glslFunction
- */
- void czm_writeLogDepth() {
- #ifdef LOG_DEPTH
- czm_writeLogDepth(v_depthFromNearPlusOne);
- #endif
- }
|