{"version":3,"file":"generateParticleUpdatePolyfill.js","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":["getAttributeInfoFromFormat","particleUpdateFunctions"],"mappings":";;;;;;AAaO,SAAS,+BAA+B,UAC/C,EAAA;AACI,EAAM,MAAA,aAAA,GAAgB,MAAO,CAAA,MAAA,CAAO,UAAU,CAAA,CAAA;AAC9C,EAAA,MAAM,oBAAoB,aAAc,CAAA,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA,CAAA;AAC/D,EAAA,MAAM,mBAAmB,aAAc,CAAA,MAAA,CAAO,CAAC,CAAM,KAAA,CAAC,EAAE,OAAO,CAAA,CAAA;AAE/D,EAAO,OAAA;AAAA,IACH,aAAA,EAAe,uBAAuB,iBAAiB,CAAA;AAAA,IACvD,YAAA,EAAc,uBAAuB,gBAAgB,CAAA;AAAA,GACzD,CAAA;AACJ,CAAA;AAEA,SAAS,uBAAuB,UAChC,EAAA;AACI,EAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,EAAA,MAAM,aAA2E,EAAC,CAAA;AAElF,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CACvC,EAAA,EAAA;AACI,IAAM,MAAA,QAAA,GAAW,WAAW,CAAC,CAAA,CAAA;AAE7B,IAAA,MAAM,eAAkB,GAAAA,qDAAA,CAA2B,QAAS,CAAA,MAAM,EAAE,MAAS,GAAA,CAAA,CAAA;AAE7E,IAAU,MAAA,IAAA,eAAA,CAAA;AAEV,IAAA,UAAA,CAAW,IAAK,CAAA;AAAA,MACZ,MAAQ,EAAA,eAAA;AAAA,MACR,cACA,EAAA,QAAA,CAAS,cACN,IAAAC,+CAAA,CAAwB,SAAS,aAAqD,CAAA;AAAA,KAC5F,CAAA,CAAA;AAAA,GACL;AAEA,EAAO,OAAA,CAAC,EAAiB,EAAA,IAAA,EAAoB,IAC7C,KAAA;AACI,IAAA,IAAI,MAAS,GAAA,CAAA,CAAA;AAEb,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,UAAA,CAAW,QAAQ,CACvC,EAAA,EAAA;AACI,MAAM,MAAA,GAAA,GAAM,WAAW,CAAC,CAAA,CAAA;AAExB,MAAA,GAAA,CAAI,cAAe,CAAA,EAAA,EAAI,IAAM,EAAA,IAAA,EAAM,QAAQ,MAAM,CAAA,CAAA;AACjD,MAAA,MAAA,IAAU,GAAI,CAAA,MAAA,CAAA;AAAA,KAClB;AAAA,GACJ,CAAA;AACJ;;;;"}