Reference Source

src/viewer/scene/mesh/shadow/ShadowShaderSource.js

export const ShadowShaderSource = function(meshHash, programVariables) {
    const encodeFloat = programVariables.createFragmentDefinition(
        "encodeFloat",
        (name, src) => {
            src.push(`vec4 ${name}( const in float depth ) {`);
            src.push("  const vec4 bitShift = vec4(256 * 256 * 256, 256 * 256, 256, 1.0);");
            src.push("  const vec4 bitMask = vec4(0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0);");
            src.push("  vec4 comp = fract(depth * bitShift);");
            src.push("  comp -= comp.xxyz * bitMask;");
            src.push("  return comp;");
            src.push("}");
        });
    const outColor = programVariables.createOutput("vec4", "outColor");
    return {
        getHash: () => [ meshHash ],
        programName: "Shadow",
        setsLineWidth: true,
        useShadowView: true,
        dontBillboardAnything: true,
        dontGetLogDepth: true,
        appendFragmentOutputs: (src, getGammaOutputExpression, gl_FragCoord) => src.push(`${outColor} = ${encodeFloat}(${gl_FragCoord}.z);`)
    };
};