{"version":3,"file":"generateParticleUpdateFunction.mjs","sources":["../../../../../src/scene/particle-container/shared/utils/generateParticleUpdateFunction.ts"],"sourcesContent":["import {\n    getAttributeInfoFromFormat\n} from '../../../../rendering/renderers/shared/geometry/utils/getAttributeInfoFromFormat';\n\nimport type { IParticle } from '../Particle';\nimport type { ParticleRendererProperty } from '../particleData';\n\n// TODO rename to update function\n/** @internal */\nexport type ParticleUpdateFunction = (ps: IParticle[], f32v: Float32Array, u32v: Uint32Array) => void;\n\n/**\n * @param properties\n * @internal\n */\nexport function generateParticleUpdateFunction(properties: Record<string, ParticleRendererProperty>)\n{\n    return {\n        dynamicUpdate: generateUpdateFunction(properties, true),\n        staticUpdate: generateUpdateFunction(properties, false),\n    };\n}\n\nfunction generateUpdateFunction(\n    properties: Record<string, ParticleRendererProperty>,\n    dynamic: boolean\n): ParticleUpdateFunction\n{\n    const funcFragments: string[] = [];\n\n    funcFragments.push(`\n\n        var index = 0;\n\n        for (let i = 0; i < ps.length; ++i)\n        {\n            const p = ps[i];\n\n            `);\n\n    let offset = 0;\n\n    for (const i in properties)\n    {\n        const property = properties[i];\n\n        if (dynamic !== property.dynamic) continue;\n\n        funcFragments.push(`offset = index + ${offset}`);\n\n        funcFragments.push(property.code);\n\n        const attributeInfo = getAttributeInfoFromFormat(property.format);\n\n        offset += attributeInfo.stride / 4;\n    }\n\n    funcFragments.push(`\n            index += stride * 4;\n        }\n    `);\n\n    // add to the front..\n    funcFragments.unshift(`\n        var stride = ${offset};\n    `);\n\n    const functionSource = funcFragments.join('\\n');\n\n    // eslint-disable-next-line no-new-func\n    return new Function('ps', 'f32v', 'u32v', functionSource) as ParticleUpdateFunction;\n}\n"],"names":[],"mappings":";;;AAeO,SAAS,+BAA+B,UAAA,EAC/C;AACI,EAAA,OAAO;AAAA,IACH,aAAA,EAAe,sBAAA,CAAuB,UAAA,EAAY,IAAI,CAAA;AAAA,IACtD,YAAA,EAAc,sBAAA,CAAuB,UAAA,EAAY,KAAK;AAAA,GAC1D;AACJ;AAEA,SAAS,sBAAA,CACL,YACA,OAAA,EAEJ;AACI,EAAA,MAAM,gBAA0B,EAAC;AAEjC,EAAA,aAAA,CAAc,IAAA,CAAK;;AAAA;;AAAA;AAAA;AAAA;;AAAA,YAAA,CAQV,CAAA;AAET,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,KAAA,MAAW,KAAK,UAAA,EAChB;AACI,IAAA,MAAM,QAAA,GAAW,WAAW,CAAC,CAAA;AAE7B,IAAA,IAAI,OAAA,KAAY,SAAS,OAAA,EAAS;AAElC,IAAA,aAAA,CAAc,IAAA,CAAK,CAAA,iBAAA,EAAoB,MAAM,CAAA,CAAE,CAAA;AAE/C,IAAA,aAAA,CAAc,IAAA,CAAK,SAAS,IAAI,CAAA;AAEhC,IAAA,MAAM,aAAA,GAAgB,0BAAA,CAA2B,QAAA,CAAS,MAAM,CAAA;AAEhE,IAAA,MAAA,IAAU,cAAc,MAAA,GAAS,CAAA;AAAA,EACrC;AAEA,EAAA,aAAA,CAAc,IAAA,CAAK;AAAA;AAAA;AAAA,IAAA,CAGlB,CAAA;AAGD,EAAA,aAAA,CAAc,OAAA,CAAQ;AAAA,qBAAA,EACH,MAAM,CAAA;AAAA,IAAA,CACxB,CAAA;AAED,EAAA,MAAM,cAAA,GAAiB,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAG9C,EAAA,OAAO,IAAI,QAAA,CAAS,IAAA,EAAM,MAAA,EAAQ,QAAQ,cAAc,CAAA;AAC5D;;;;"}