35 lines
1.4 KiB
JavaScript
35 lines
1.4 KiB
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;
|