12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #ifdef LOG_DEPTH
- in float v_depthFromNearPlusOne;
- #ifdef POLYGON_OFFSET
- uniform vec2 u_polygonOffset;
- #ifdef GL_OES_standard_derivatives
- #extension GL_OES_standard_derivatives : enable
- #endif
- #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(LOG_DEPTH) && (__VERSION__ == 300 || defined(GL_EXT_frag_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 (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))
- // This factor doesn't work in IE 10
- if (factor != 0.0) {
- // 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_FragDepth = log2(depth) * czm_oneOverLog2FarDepthFromNearPlusOne;
- #ifdef POLYGON_OFFSET
- // Apply the units after the log depth.
- gl_FragDepth += 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
- }
|