{"version":3,"file":"generateArraySyncSTD40.mjs","sources":["../../../../../../src/rendering/renderers/gl/shader/utils/generateArraySyncSTD40.ts"],"sourcesContent":["import { WGSL_TO_STD40_SIZE } from './createUboElementsSTD40';\n\nimport type { UboElement } from '../../../shared/shader/types';\n\n/**\n * This generates a function that will sync an array to the uniform buffer\n * following the std140 layout\n * @param uboElement - the element to generate the array sync for\n * @param offsetToAdd - the offset to append at the start of the code\n * @returns - the generated code\n */\nexport function generateArraySyncSTD40(uboElement: UboElement, offsetToAdd: number): string\n{\n    const rowSize = Math.max(WGSL_TO_STD40_SIZE[uboElement.data.type] / 16, 1);\n    const elementSize = (uboElement.data.value as Array<number>).length / uboElement.data.size;// size / rowSize;\n\n    const remainder = (4 - (elementSize % 4)) % 4;\n\n    return `\n        v = uv.${uboElement.data.name};\n        offset += ${offsetToAdd};\n\n        arrayOffset = offset;\n\n        t = 0;\n\n        for(var i=0; i < ${uboElement.data.size * rowSize}; i++)\n        {\n            for(var j = 0; j < ${elementSize}; j++)\n            {\n                data[arrayOffset++] = v[t++];\n            }\n            ${remainder !== 0 ? `arrayOffset += ${remainder};` : ''}\n        }\n    `;\n}\n"],"names":[],"mappings":";;;AAWgB,SAAA,sBAAA,CAAuB,YAAwB,WAC/D,EAAA;AACI,EAAM,MAAA,OAAA,GAAU,KAAK,GAAI,CAAA,kBAAA,CAAmB,WAAW,IAAK,CAAA,IAAI,CAAI,GAAA,EAAA,EAAI,CAAC,CAAA,CAAA;AACzE,EAAA,MAAM,cAAe,UAAW,CAAA,IAAA,CAAK,KAAwB,CAAA,MAAA,GAAS,WAAW,IAAK,CAAA,IAAA,CAAA;AAEtF,EAAM,MAAA,SAAA,GAAA,CAAa,CAAK,GAAA,WAAA,GAAc,CAAM,IAAA,CAAA,CAAA;AAE5C,EAAO,OAAA,CAAA;AAAA,eACM,EAAA,UAAA,CAAW,KAAK,IAAI,CAAA;AAAA,kBAAA,EACjB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAMJ,EAAA,UAAA,CAAW,IAAK,CAAA,IAAA,GAAO,OAAO,CAAA;AAAA;AAAA,+BAAA,EAExB,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA,YAAA,EAI9B,SAAc,KAAA,CAAA,GAAI,CAAkB,eAAA,EAAA,SAAS,MAAM,EAAE,CAAA;AAAA;AAAA,IAAA,CAAA,CAAA;AAGnE;;;;"}