{"version":3,"file":"generateParticleUpdatePolyfill.mjs","sources":["../../../src/unsafe-eval/particle/generateParticleUpdatePolyfill.ts"],"sourcesContent":["import { getAttributeInfoFromFormat } from '../../rendering/renderers/shared/geometry/utils/getAttributeInfoFromFormat';\nimport { particleUpdateFunctions } from './particleUpdateFunctions';\n\nimport type { IParticle } from '../../scene/particle-container/shared/Particle';\nimport type { ParticleRendererProperty } from '../../scene/particle-container/shared/particleData';\n\n// eslint-disable-next-line max-len\ntype ParticleUpdateFunction = (ps: IParticle[], f32v: Float32Array, u32v: Uint32Array, offset: number, stride: number) => void;\n\n/**\n * @param properties\n * @internal\n */\nexport function generateParticleUpdatePolyfill(properties: Record<string, ParticleRendererProperty>)\n{\n    const allProperties = Object.values(properties);\n    const dynamicProperties = allProperties.filter((p) => p.dynamic);\n    const staticProperties = allProperties.filter((p) => !p.dynamic);\n\n    return {\n        dynamicUpdate: generateUpdateFunction(dynamicProperties),\n        staticUpdate: generateUpdateFunction(staticProperties),\n    };\n}\n\nfunction generateUpdateFunction(properties: ParticleRendererProperty[]): ParticleUpdateFunction\n{\n    let stride = 0;\n\n    const updateData: { stride: number; updateFunction: ParticleUpdateFunction }[] = [];\n\n    for (let i = 0; i < properties.length; i++)\n    {\n        const property = properties[i];\n\n        const attributeStride = getAttributeInfoFromFormat(property.format).stride / 4;\n\n        stride += attributeStride;\n\n        updateData.push({\n            stride: attributeStride,\n            updateFunction:\n            property.updateFunction\n            || particleUpdateFunctions[property.attributeName as keyof typeof particleUpdateFunctions]\n        });\n    }\n\n    return (ps: IParticle[], f32v: Float32Array, u32v: Uint32Array) =>\n    {\n        let offset = 0;\n\n        for (let i = 0; i < updateData.length; i++)\n        {\n            const obx = updateData[i];\n\n            obx.updateFunction(ps, f32v, u32v, offset, stride);\n            offset += obx.stride;\n        }\n    };\n}\n"],"names":[],"mappings":";;;;AAaO,SAAS,+BAA+B,UAAA,EAC/C;AACI,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA;AAC9C,EAAA,MAAM,oBAAoB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAC/D,EAAA,MAAM,mBAAmB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,EAAE,OAAO,CAAA;AAE/D,EAAA,OAAO;AAAA,IACH,aAAA,EAAe,uBAAuB,iBAAiB,CAAA;AAAA,IACvD,YAAA,EAAc,uBAAuB,gBAAgB;AAAA,GACzD;AACJ;AAEA,SAAS,uBAAuB,UAAA,EAChC;AACI,EAAA,IAAI,MAAA,GAAS,CAAA;AAEb,EAAA,MAAM,aAA2E,EAAC;AAElF,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EACvC;AACI,IAAA,MAAM,QAAA,GAAW,WAAW,CAAC,CAAA;AAE7B,IAAA,MAAM,eAAA,GAAkB,0BAAA,CAA2B,QAAA,CAAS,MAAM,EAAE,MAAA,GAAS,CAAA;AAE7E,IAAA,MAAA,IAAU,eAAA;AAEV,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACZ,MAAA,EAAQ,eAAA;AAAA,MACR,cAAA,EACA,QAAA,CAAS,cAAA,IACN,uBAAA,CAAwB,SAAS,aAAqD;AAAA,KAC5F,CAAA;AAAA,EACL;AAEA,EAAA,OAAO,CAAC,EAAA,EAAiB,IAAA,EAAoB,IAAA,KAC7C;AACI,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,CAAW,QAAQ,CAAA,EAAA,EACvC;AACI,MAAA,MAAM,GAAA,GAAM,WAAW,CAAC,CAAA;AAExB,MAAA,GAAA,CAAI,cAAA,CAAe,EAAA,EAAI,IAAA,EAAM,IAAA,EAAM,QAAQ,MAAM,CAAA;AACjD,MAAA,MAAA,IAAU,GAAA,CAAI,MAAA;AAAA,IAClB;AAAA,EACJ,CAAA;AACJ;;;;"}