@cesium/engine
Version:
CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.
35 lines (32 loc) • 1.46 kB
JavaScript
import Check from "../Core/Check.js";
/**
* Gets a GLSL snippet that clips a fragment using the `clip` function from {@link getClippingFunction} and styles it.
*
* @param {string} samplerUniformName Name of the uniform for the clipping planes texture sampler.
* @param {string} matrixUniformName Name of the uniform for the clipping planes matrix.
* @param {string} styleUniformName Name of the uniform for the clipping planes style, a vec4.
* @returns {string} A string containing GLSL that clips and styles the current fragment.
* @private
*/
function getClipAndStyleCode(
samplerUniformName,
matrixUniformName,
styleUniformName,
) {
//>>includeStart('debug', pragmas.debug);
Check.typeOf.string("samplerUniformName", samplerUniformName);
Check.typeOf.string("matrixUniformName", matrixUniformName);
Check.typeOf.string("styleUniformName", styleUniformName);
//>>includeEnd('debug');
const shaderCode =
` float clipDistance = clip(gl_FragCoord, ${samplerUniformName}, ${matrixUniformName}); \n` +
` vec4 clippingPlanesEdgeColor = vec4(1.0); \n` +
` clippingPlanesEdgeColor.rgb = ${styleUniformName}.rgb; \n` +
` float clippingPlanesEdgeWidth = ${styleUniformName}.a; \n` +
` if (clipDistance > 0.0 && clipDistance < clippingPlanesEdgeWidth) \n` +
` { \n` +
` out_FragColor = clippingPlanesEdgeColor;\n` +
` } \n`;
return shaderCode;
}
export default getClipAndStyleCode;