| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 | varying vec3 v_forwardDirectionEC;varying vec3 v_texcoordNormalizationAndHalfWidth;varying float v_batchId;#ifdef PER_INSTANCE_COLORvarying vec4 v_color;#elsevarying vec2 v_alignedPlaneDistances;varying float v_texcoordT;#endiffloat rayPlaneDistanceUnsafe(vec3 origin, vec3 direction, vec3 planeNormal, float planeDistance) {    // We don't expect the ray to ever be parallel to the plane    return (-planeDistance - dot(planeNormal, origin)) / dot(planeNormal, direction);}void main(void){    vec4 eyeCoordinate = gl_FragCoord;    eyeCoordinate /= eyeCoordinate.w;#ifdef PER_INSTANCE_COLOR    gl_FragColor = czm_gammaCorrect(v_color);#else // PER_INSTANCE_COLOR    // Use distances for planes aligned with segment to prevent skew in dashing    float distanceFromStart = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, -v_forwardDirectionEC, v_forwardDirectionEC.xyz, v_alignedPlaneDistances.x);    float distanceFromEnd = rayPlaneDistanceUnsafe(eyeCoordinate.xyz, v_forwardDirectionEC, -v_forwardDirectionEC.xyz, v_alignedPlaneDistances.y);    // Clamp - distance to aligned planes may be negative due to mitering    distanceFromStart = max(0.0, distanceFromStart);    distanceFromEnd = max(0.0, distanceFromEnd);    float s = distanceFromStart / (distanceFromStart + distanceFromEnd);    s = (s * v_texcoordNormalizationAndHalfWidth.x) + v_texcoordNormalizationAndHalfWidth.y;    czm_materialInput materialInput;    materialInput.s = s;    materialInput.st = vec2(s, v_texcoordT);    materialInput.str = vec3(s, v_texcoordT, 0.0);    czm_material material = czm_getMaterial(materialInput);    gl_FragColor = vec4(material.diffuse + material.emission, material.alpha);#endif // PER_INSTANCE_COLOR}
 |