{"version":3,"file":"generateUniformsSync.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/generateUniformsSync.ts"],"sourcesContent":["// cu = Cached value's uniform data field\n// cv = Cached value\n// v = value to upload\n// ud = uniformData\n// uv = uniformValue\n\nimport { BufferResource } from '../../../shared/buffer/BufferResource';\nimport { UniformGroup } from '../../../shared/shader/UniformGroup';\nimport { uniformParsers } from '../../../shared/shader/utils/uniformParsers';\nimport { UNIFORM_TO_ARRAY_SETTERS, UNIFORM_TO_SINGLE_SETTERS } from './generateUniformsSyncTypes';\n\nimport type { UniformsSyncCallback } from '../../../shared/shader/types';\n\n/**\n * @param group\n * @param uniformData\n * @internal\n */\nexport function generateUniformsSync(group: UniformGroup, uniformData: Record<string, any>): UniformsSyncCallback\n{\n    const funcFragments = [`\n        var v = null;\n        var cv = null;\n        var cu = null;\n        var t = 0;\n        var gl = renderer.gl;\n        var name = null;\n    `];\n\n    for (const i in group.uniforms)\n    {\n        if (!uniformData[i])\n        {\n            if (group.uniforms[i] instanceof UniformGroup)\n            {\n                if ((group.uniforms[i] as UniformGroup).ubo)\n                {\n                    funcFragments.push(`\n                        renderer.shader.bindUniformBlock(uv.${i}, \"${i}\");\n                    `);\n                }\n                else\n                {\n                    funcFragments.push(`\n                        renderer.shader.updateUniformGroup(uv.${i});\n                    `);\n                }\n            }\n            else if (group.uniforms[i] instanceof BufferResource)\n            {\n                funcFragments.push(`\n                        renderer.shader.bindBufferResource(uv.${i}, \"${i}\");\n                    `);\n            }\n\n            continue;\n        }\n\n        const uniform = group.uniformStructures[i];\n\n        let parsed = false;\n\n        for (let j = 0; j < uniformParsers.length; j++)\n        {\n            const parser = uniformParsers[j];\n\n            if (uniform.type === parser.type && parser.test(uniform))\n            {\n                funcFragments.push(`name = \"${i}\";`, uniformParsers[j].uniform);\n                parsed = true;\n\n                break;\n            }\n        }\n\n        if (!parsed)\n        {\n            const templateType = uniform.size === 1 ? UNIFORM_TO_SINGLE_SETTERS : UNIFORM_TO_ARRAY_SETTERS;\n\n            const template = templateType[uniform.type].replace('location', `ud[\"${i}\"].location`);\n\n            funcFragments.push(`\n            cu = ud[\"${i}\"];\n            cv = cu.value;\n            v = uv[\"${i}\"];\n            ${template};`);\n        }\n    }\n\n    /*\n     * the introduction of syncData is to solve an issue where textures in uniform groups are not set correctly\n     * the texture count was always starting from 0 in each group. This needs to increment each time a texture is used\n     * no matter which group is being used\n     *\n     */\n    // eslint-disable-next-line no-new-func\n    return new Function('ud', 'uv', 'renderer', 'syncData', funcFragments.join('\\n')) as UniformsSyncCallback;\n}\n"],"names":[],"mappings":";;;;;;AAkBO,SAAS,oBAAA,CAAqB,OAAqB,WAAA,EAC1D;AACI,EAAA,MAAM,gBAAgB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,CAOtB,CAAA;AAED,EAAA,KAAA,MAAW,CAAA,IAAK,MAAM,QAAA,EACtB;AACI,IAAA,IAAI,CAAC,WAAA,CAAY,CAAC,CAAA,EAClB;AACI,MAAA,IAAI,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,YAAa,YAAA,EACjC;AACI,QAAA,IAAK,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA,CAAmB,GAAA,EACxC;AACI,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,4DAAA,EACuB,CAAC,MAAM,CAAC,CAAA;AAAA,oBAAA,CACjD,CAAA;AAAA,QACL,CAAA,MAEA;AACI,UAAA,aAAA,CAAc,IAAA,CAAK;AAAA,8DAAA,EACyB,CAAC,CAAA;AAAA,oBAAA,CAC5C,CAAA;AAAA,QACL;AAAA,MACJ,CAAA,MAAA,IACS,KAAA,CAAM,QAAA,CAAS,CAAC,aAAa,cAAA,EACtC;AACI,QAAA,aAAA,CAAc,IAAA,CAAK;AAAA,8DAAA,EAC6B,CAAC,MAAM,CAAC,CAAA;AAAA,oBAAA,CACnD,CAAA;AAAA,MACT;AAEA,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,iBAAA,CAAkB,CAAC,CAAA;AAEzC,IAAA,IAAI,MAAA,GAAS,KAAA;AAEb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,cAAA,CAAe,QAAQ,CAAA,EAAA,EAC3C;AACI,MAAA,MAAM,MAAA,GAAS,eAAe,CAAC,CAAA;AAE/B,MAAA,IAAI,QAAQ,IAAA,KAAS,MAAA,CAAO,QAAQ,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,EACvD;AACI,QAAA,aAAA,CAAc,KAAK,CAAA,QAAA,EAAW,CAAC,MAAM,cAAA,CAAe,CAAC,EAAE,OAAO,CAAA;AAC9D,QAAA,MAAA,GAAS,IAAA;AAET,QAAA;AAAA,MACJ;AAAA,IACJ;AAEA,IAAA,IAAI,CAAC,MAAA,EACL;AACI,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,IAAA,KAAS,CAAA,GAAI,yBAAA,GAA4B,wBAAA;AAEtE,MAAA,MAAM,QAAA,GAAW,aAAa,OAAA,CAAQ,IAAI,EAAE,OAAA,CAAQ,UAAA,EAAY,CAAA,IAAA,EAAO,CAAC,CAAA,WAAA,CAAa,CAAA;AAErF,MAAA,aAAA,CAAc,IAAA,CAAK;AAAA,qBAAA,EACR,CAAC,CAAA;AAAA;AAAA,oBAAA,EAEF,CAAC,CAAA;AAAA,YAAA,EACT,QAAQ,CAAA,CAAA,CAAG,CAAA;AAAA,IACjB;AAAA,EACJ;AASA,EAAA,OAAO,IAAI,SAAS,IAAA,EAAM,IAAA,EAAM,YAAY,UAAA,EAAY,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AACpF;;;;"}