{"version":3,"file":"createUboSyncFunction.mjs","sources":["../../../../../../src/rendering/renderers/shared/shader/utils/createUboSyncFunction.ts"],"sourcesContent":["/* eslint-disable quote-props */\nimport { uniformParsers } from './uniformParsers';\n\nimport type { UboElement, UNIFORM_TYPES_SINGLE, UniformsSyncCallback } from '../types';\n\nexport function createUboSyncFunction(\n    uboElements: UboElement[],\n    parserCode: 'uboWgsl' | 'uboStd40',\n    arrayGenerationFunction: (uboElement: UboElement, offsetToAdd: number) => string,\n    singleSettersMap: Record<UNIFORM_TYPES_SINGLE, string>,\n): UniformsSyncCallback\n{\n    const funcFragments = [`\n        var v = null;\n        var v2 = null;\n        var t = 0;\n        var index = 0;\n        var name = null;\n        var arrayOffset = null;\n    `];\n\n    let prev = 0;\n\n    for (let i = 0; i < uboElements.length; i++)\n    {\n        const uboElement = uboElements[i];\n\n        const name = uboElement.data.name;\n\n        let parsed = false;\n        let offset = 0;\n\n        for (let j = 0; j < uniformParsers.length; j++)\n        {\n            const uniformParser = uniformParsers[j];\n\n            if (uniformParser.test(uboElement.data))\n            {\n                offset = uboElement.offset / 4;\n\n                funcFragments.push(\n                    `name = \"${name}\";`,\n                    `offset += ${offset - prev};`,\n                    uniformParsers[j][parserCode] || uniformParsers[j].ubo);\n                parsed = true;\n\n                break;\n            }\n        }\n\n        if (!parsed)\n        {\n            if (uboElement.data.size > 1)\n            {\n                offset = uboElement.offset / 4;\n\n                funcFragments.push(arrayGenerationFunction(uboElement, offset - prev));\n            }\n            else\n            {\n                const template = singleSettersMap[uboElement.data.type as UNIFORM_TYPES_SINGLE];\n\n                offset = uboElement.offset / 4;\n\n                funcFragments.push(/* wgsl */`\n                    v = uv.${name};\n                    offset += ${offset - prev};\n                    ${template};\n                `);\n            }\n        }\n\n        prev = offset;\n    }\n\n    const fragmentSrc = funcFragments.join('\\n');\n\n    // eslint-disable-next-line no-new-func\n    return new Function(\n        'uv',\n        'data',\n        'offset',\n        fragmentSrc,\n    ) as UniformsSyncCallback;\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,qBACZ,CAAA,WAAA,EACA,UACA,EAAA,uBAAA,EACA,gBAEJ,EAAA;AACI,EAAA,MAAM,gBAAgB,CAAC,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOtB,CAAA,CAAA,CAAA;AAED,EAAA,IAAI,IAAO,GAAA,CAAA,CAAA;AAEX,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,CAAY,QAAQ,CACxC,EAAA,EAAA;AACI,IAAM,MAAA,UAAA,GAAa,YAAY,CAAC,CAAA,CAAA;AAEhC,IAAM,MAAA,IAAA,GAAO,WAAW,IAAK,CAAA,IAAA,CAAA;AAE7B,IAAA,IAAI,MAAS,GAAA,KAAA,CAAA;AACb,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAC3C,EAAA,EAAA;AACI,MAAM,MAAA,aAAA,GAAgB,eAAe,CAAC,CAAA,CAAA;AAEtC,MAAA,IAAI,aAAc,CAAA,IAAA,CAAK,UAAW,CAAA,IAAI,CACtC,EAAA;AACI,QAAA,MAAA,GAAS,WAAW,MAAS,GAAA,CAAA,CAAA;AAE7B,QAAc,aAAA,CAAA,IAAA;AAAA,UACV,WAAW,IAAI,CAAA,EAAA,CAAA;AAAA,UACf,CAAA,UAAA,EAAa,SAAS,IAAI,CAAA,CAAA,CAAA;AAAA,UAC1B,eAAe,CAAC,CAAA,CAAE,UAAU,CAAK,IAAA,cAAA,CAAe,CAAC,CAAE,CAAA,GAAA;AAAA,SAAG,CAAA;AAC1D,QAAS,MAAA,GAAA,IAAA,CAAA;AAET,QAAA,MAAA;AAAA,OACJ;AAAA,KACJ;AAEA,IAAA,IAAI,CAAC,MACL,EAAA;AACI,MAAI,IAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,CAC3B,EAAA;AACI,QAAA,MAAA,GAAS,WAAW,MAAS,GAAA,CAAA,CAAA;AAE7B,QAAA,aAAA,CAAc,IAAK,CAAA,uBAAA,CAAwB,UAAY,EAAA,MAAA,GAAS,IAAI,CAAC,CAAA,CAAA;AAAA,OAGzE,MAAA;AACI,QAAA,MAAM,QAAW,GAAA,gBAAA,CAAiB,UAAW,CAAA,IAAA,CAAK,IAA4B,CAAA,CAAA;AAE9E,QAAA,MAAA,GAAS,WAAW,MAAS,GAAA,CAAA,CAAA;AAE7B,QAAc,aAAA,CAAA,IAAA;AAAA;AAAA,UAAe,CAAA;AAAA,2BAAA,EAChB,IAAI,CAAA;AAAA,8BAAA,EACD,SAAS,IAAI,CAAA;AAAA,oBAAA,EACvB,QAAQ,CAAA;AAAA,gBAAA,CAAA;AAAA,SACb,CAAA;AAAA,OACL;AAAA,KACJ;AAEA,IAAO,IAAA,GAAA,MAAA,CAAA;AAAA,GACX;AAEA,EAAM,MAAA,WAAA,GAAc,aAAc,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAG3C,EAAA,OAAO,IAAI,QAAA;AAAA,IACP,IAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACJ,CAAA;AACJ;;;;"}