{"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,YAAe,GAAA;AAAA,EACjB,0BAAA;AAAA,EACA,kBAAA;AAAA,EACA,mBAAA;AAAA,EACA,WAAA;AAAA,EACA,2BAAA;AAAA,EACA,GAAA;AACJ,CAAA,CAAE,KAAK,IAAI,CAAA,CAAA;AAEX,SAAA,iBAAA,CAA2B,MAC3B,EAAA;AACI,EAAA,IAAI,GAAM,GAAA,EAAA,CAAA;AAEV,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,MAAA,EAAQ,EAAE,CAC9B,EAAA;AACI,IAAA,IAAI,IAAI,CACR,EAAA;AACI,MAAO,GAAA,IAAA,SAAA,CAAA;AAAA,KACX;AAEA,IAAI,IAAA,CAAA,GAAI,SAAS,CACjB,EAAA;AACI,MAAA,GAAA,IAAO,CAAc,WAAA,EAAA,CAAA,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB;AAAA,GACJ;AAEA,EAAO,OAAA,GAAA,CAAA;AACX,CAAA;AAEO,SAAA,4BAAA,CAAsC,QAAgB,EAC7D,EAAA;AACI,EAAA,IAAI,WAAW,CACf,EAAA;AACI,IAAM,MAAA,IAAI,MAAM,+DAA+D,CAAA,CAAA;AAAA,GACnF;AAEA,EAAA,MAAM,MAAS,GAAA,EAAA,CAAG,YAAa,CAAA,EAAA,CAAG,eAAe,CAAA,CAAA;AAEjD,EAAA,OAAO,IACP,EAAA;AACI,IAAA,MAAM,cAAc,YAAa,CAAA,OAAA,CAAQ,aAAe,EAAA,iBAAA,CAAkB,MAAM,CAAC,CAAA,CAAA;AAEjF,IAAG,EAAA,CAAA,YAAA,CAAa,QAAQ,WAAW,CAAA,CAAA;AACnC,IAAA,EAAA,CAAG,cAAc,MAAM,CAAA,CAAA;AAEvB,IAAA,IAAI,CAAC,EAAG,CAAA,kBAAA,CAAmB,MAAQ,EAAA,EAAA,CAAG,cAAc,CACpD,EAAA;AACI,MAAA,MAAA,GAAU,SAAS,CAAK,GAAA,CAAA,CAAA;AAAA,KAG5B,MAAA;AAEI,MAAA,MAAA;AAAA,KACJ;AAAA,GACJ;AAEA,EAAO,OAAA,MAAA,CAAA;AACX;;;;"}