@pixi/core
Version:
Core PixiJS
1 lines • 2.08 kB
Source Map (JSON)
{"version":3,"file":"checkMaxIfStatementsInShader.mjs","sources":["../../../src/shader/utils/checkMaxIfStatementsInShader.ts"],"sourcesContent":["import type { IRenderingContext } from '../../IRenderer';\n\nconst fragTemplate = [\n 'precision mediump float;',\n 'void main(void){',\n 'float test = 0.1;',\n '%forloop%',\n 'gl_FragColor = vec4(0.0);',\n '}',\n].join('\\n');\n\nfunction generateIfTestSrc(maxIfs: number): string\n{\n let src = '';\n\n for (let i = 0; i < maxIfs; ++i)\n {\n if (i > 0)\n {\n src += '\\nelse ';\n }\n\n if (i < maxIfs - 1)\n {\n src += `if(test == ${i}.0){}`;\n }\n }\n\n return src;\n}\n\nexport function checkMaxIfStatementsInShader(maxIfs: number, gl: IRenderingContext): number\n{\n if (maxIfs === 0)\n {\n throw new Error('Invalid value of `0` passed to `checkMaxIfStatementsInShader`');\n }\n\n const shader = gl.createShader(gl.FRAGMENT_SHADER);\n\n while (true) // eslint-disable-line no-constant-condition\n {\n const fragmentSrc = fragTemplate.replace(/%forloop%/gi, generateIfTestSrc(maxIfs));\n\n gl.shaderSource(shader, fragmentSrc);\n gl.compileShader(shader);\n\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS))\n {\n maxIfs = (maxIfs / 2) | 0;\n }\n else\n {\n // valid!\n break;\n }\n }\n\n return maxIfs;\n}\n"],"names":[],"mappings":"AAEA,MAAM,eAAe;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,EAAE,KAAK;AAAA,CAAI;AAEX,SAAS,kBAAkB,QAC3B;AACI,MAAI,MAAM;AAEV,WAAS,IAAI,GAAG,IAAI,QAAQ,EAAE;AAEtB,QAAI,MAEJ,OAAO;AAAA,SAGP,IAAI,SAAS,MAEb,OAAO,cAAc,CAAC;AAIvB,SAAA;AACX;AAEgB,SAAA,6BAA6B,QAAgB,IAC7D;AACI,MAAI,WAAW;AAEL,UAAA,IAAI,MAAM,+DAA+D;AAGnF,QAAM,SAAS,GAAG,aAAa,GAAG,eAAe;AAGjD,aAAA;AACI,UAAM,cAAc,aAAa,QAAQ,eAAe,kBAAkB,MAAM,CAAC;AAKjF,QAHA,GAAG,aAAa,QAAQ,WAAW,GACnC,GAAG,cAAc,MAAM,GAEnB,CAAC,GAAG,mBAAmB,QAAQ,GAAG,cAAc;AAEhD,eAAU,SAAS,IAAK;AAAA;AAKxB;AAAA,EAER;AAEO,SAAA;AACX;"}