You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.5 KiB
JavaScript
43 lines
1.5 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');
|
|
|
|
var 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" +
|
|
" gl_FragColor = clippingPlanesEdgeColor;\n" +
|
|
" } \n";
|
|
return shaderCode;
|
|
}
|
|
export default getClipAndStyleCode;
|