pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
46 lines (44 loc) • 1.12 kB
JavaScript
;
const fragTemplate = [
"precision mediump float;",
"void main(void){",
"float test = 0.1;",
"%forloop%",
"gl_FragColor = vec4(0.0);",
"}"
].join("\n");
function generateIfTestSrc(maxIfs) {
let src = "";
for (let i = 0; i < maxIfs; ++i) {
if (i > 0) {
src += "\nelse ";
}
if (i < maxIfs - 1) {
src += `if(test == ${i}.0){}`;
}
}
return src;
}
function checkMaxIfStatementsInShader(maxIfs, gl) {
if (maxIfs === 0) {
throw new Error("Invalid value of `0` passed to `checkMaxIfStatementsInShader`");
}
const shader = gl.createShader(gl.FRAGMENT_SHADER);
try {
while (true) {
const fragmentSrc = fragTemplate.replace(/%forloop%/gi, generateIfTestSrc(maxIfs));
gl.shaderSource(shader, fragmentSrc);
gl.compileShader(shader);
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
maxIfs = maxIfs / 2 | 0;
} else {
break;
}
}
} finally {
gl.deleteShader(shader);
}
return maxIfs;
}
export { checkMaxIfStatementsInShader };
//# sourceMappingURL=checkMaxIfStatementsInShader.mjs.map