{"version":3,"file":"checkMaxIfStatementsInShader.mjs","sources":["../../../../../src/rendering/batcher/gl/utils/checkMaxIfStatementsInShader.ts"],"sourcesContent":["import type { GlRenderingContext } from '../../../renderers/gl/context/GlRenderingContext';\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\n/**\n * @param maxIfs\n * @param gl\n * @internal\n */\nexport function checkMaxIfStatementsInShader(maxIfs: number, gl: GlRenderingContext): 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    try\n    {\n        while (true)\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    finally\n    {\n        gl.deleteShader(shader);\n    }\n\n    return maxIfs;\n}\n"],"names":[],"mappings":";AAEA,MAAM,YAAA,GAAe;AAAA,EACjB,0BAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,2BAAA;AAAA,EACA;AACJ,CAAA,CAAE,KAAK,IAAI,CAAA;AAEX,SAAS,kBAAkB,MAAA,EAC3B;AACI,EAAA,IAAI,GAAA,GAAM,EAAA;AAEV,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,EAAE,CAAA,EAC9B;AACI,IAAA,IAAI,IAAI,CAAA,EACR;AACI,MAAA,GAAA,IAAO,SAAA;AAAA,IACX;AAEA,IAAA,IAAI,CAAA,GAAI,SAAS,CAAA,EACjB;AACI,MAAA,GAAA,IAAO,cAAc,CAAC,CAAA,KAAA,CAAA;AAAA,IAC1B;AAAA,EACJ;AAEA,EAAA,OAAO,GAAA;AACX;AAOO,SAAS,4BAAA,CAA6B,QAAgB,EAAA,EAC7D;AACI,EAAA,IAAI,WAAW,CAAA,EACf;AACI,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACnF;AAEA,EAAA,MAAM,MAAA,GAAS,EAAA,CAAG,YAAA,CAAa,EAAA,CAAG,eAAe,CAAA;AAEjD,EAAA,IACA;AACI,IAAA,OAAO,IAAA,EACP;AACI,MAAA,MAAM,cAAc,YAAA,CAAa,OAAA,CAAQ,aAAA,EAAe,iBAAA,CAAkB,MAAM,CAAC,CAAA;AAEjF,MAAA,EAAA,CAAG,YAAA,CAAa,QAAQ,WAAW,CAAA;AACnC,MAAA,EAAA,CAAG,cAAc,MAAM,CAAA;AAEvB,MAAA,IAAI,CAAC,EAAA,CAAG,kBAAA,CAAmB,MAAA,EAAQ,EAAA,CAAG,cAAc,CAAA,EACpD;AACI,QAAA,MAAA,GAAU,SAAS,CAAA,GAAK,CAAA;AAAA,MAC5B,CAAA,MAEA;AAEI,QAAA;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAA,SACA;AAEI,IAAA,EAAA,CAAG,aAAa,MAAM,CAAA;AAAA,EAC1B;AAEA,EAAA,OAAO,MAAA;AACX;;;;"}