{"version":3,"file":"BatchableGraphics.mjs","sources":["../../../../src/scene/graphics/shared/BatchableGraphics.ts"],"sourcesContent":["import { multiplyHexColors } from '../../container/utils/multiplyHexColors';\n\nimport type { Batch, BatchableObject, Batcher } from '../../../rendering/batcher/shared/Batcher';\nimport type { IndexBufferArray } from '../../../rendering/renderers/shared/geometry/Geometry';\nimport type { Texture } from '../../../rendering/renderers/shared/texture/Texture';\nimport type { Graphics } from './Graphics';\n\n/**\n * A batchable graphics object.\n * @ignore\n */\nexport class BatchableGraphics implements BatchableObject\n{\n    public indexStart: number;\n    public textureId: number;\n    public texture: Texture;\n    public location: number;\n    public batcher: Batcher = null;\n    public batch: Batch = null;\n    public renderable: Graphics;\n    public indexOffset: number;\n    public indexSize: number;\n    public vertexOffset: number;\n    public vertexSize: number;\n    public color: number;\n    public alpha: number;\n    public applyTransform = true;\n    public roundPixels: 0 | 1 = 0;\n\n    public geometryData: { vertices: number[]; uvs: number[]; indices: number[]; };\n\n    get blendMode()\n    {\n        if (this.applyTransform)\n        {\n            return this.renderable.groupBlendMode;\n        }\n\n        return 'normal';\n    }\n\n    public packIndex(indexBuffer: IndexBufferArray, index: number, indicesOffset: number)\n    {\n        const indices = this.geometryData.indices;\n\n        for (let i = 0; i < this.indexSize; i++)\n        {\n            indexBuffer[index++] = indices[i + this.indexOffset] + indicesOffset - this.vertexOffset;\n        }\n    }\n\n    public packAttributes(\n        float32View: Float32Array,\n        uint32View: Uint32Array,\n        index: number,\n        textureId: number\n    )\n    {\n        const geometry = this.geometryData;\n        const graphics = this.renderable;\n\n        const positions = geometry.vertices;\n        const uvs = geometry.uvs;\n\n        const offset = this.vertexOffset * 2;\n        const vertSize = (this.vertexOffset + this.vertexSize) * 2;\n\n        const rgb = this.color;\n        const bgr = (rgb >> 16) | (rgb & 0xff00) | ((rgb & 0xff) << 16);\n\n        if (this.applyTransform)\n        {\n            const argb = multiplyHexColors(bgr, graphics.groupColor)\n            + ((this.alpha * graphics.groupAlpha * 255) << 24);\n\n            const wt = graphics.groupTransform;\n            const textureIdAndRound = (textureId << 16) | (this.roundPixels & 0xFFFF);\n\n            const a = wt.a;\n            const b = wt.b;\n            const c = wt.c;\n            const d = wt.d;\n            const tx = wt.tx;\n            const ty = wt.ty;\n\n            for (let i = offset; i < vertSize; i += 2)\n            {\n                const x = positions[i];\n                const y = positions[i + 1];\n\n                float32View[index] = (a * x) + (c * y) + tx;\n                float32View[index + 1] = (b * x) + (d * y) + ty;\n\n                float32View[index + 2] = uvs[i];\n                float32View[index + 3] = uvs[i + 1];\n\n                uint32View[index + 4] = argb;\n                uint32View[index + 5] = textureIdAndRound;\n\n                index += 6;\n            }\n        }\n        else\n        {\n            const argb = bgr + ((this.alpha * 255) << 24);\n\n            for (let i = offset; i < vertSize; i += 2)\n            {\n                float32View[index] = positions[i];\n                float32View[index + 1] = positions[i + 1];\n\n                float32View[index + 2] = uvs[i];\n                float32View[index + 3] = uvs[i + 1];\n\n                uint32View[index + 4] = argb;\n                uint32View[index + 5] = textureId << 16;\n\n                index += 6;\n            }\n        }\n    }\n\n    // TODO rename to vertexSize\n    get vertSize()\n    {\n        return this.vertexSize;\n    }\n\n    public copyTo(gpuBuffer: BatchableGraphics)\n    {\n        gpuBuffer.indexOffset = this.indexOffset;\n        gpuBuffer.indexSize = this.indexSize;\n\n        gpuBuffer.vertexOffset = this.vertexOffset;\n        gpuBuffer.vertexSize = this.vertexSize;\n\n        gpuBuffer.color = this.color;\n        gpuBuffer.alpha = this.alpha;\n\n        gpuBuffer.texture = this.texture;\n        gpuBuffer.geometryData = this.geometryData;\n    }\n\n    public reset()\n    {\n        this.applyTransform = true;\n    }\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,iBACb,CAAA;AAAA,EADO,WAAA,GAAA;AAMH,IAAA,IAAA,CAAO,OAAmB,GAAA,IAAA,CAAA;AAC1B,IAAA,IAAA,CAAO,KAAe,GAAA,IAAA,CAAA;AAQtB,IAAA,IAAA,CAAO,cAAiB,GAAA,IAAA,CAAA;AACxB,IAAA,IAAA,CAAO,WAAqB,GAAA,CAAA,CAAA;AAAA,GAAA;AAAA,EAI5B,IAAI,SACJ,GAAA;AACI,IAAA,IAAI,KAAK,cACT,EAAA;AACI,MAAA,OAAO,KAAK,UAAW,CAAA,cAAA,CAAA;AAAA,KAC3B;AAEA,IAAO,OAAA,QAAA,CAAA;AAAA,GACX;AAAA,EAEO,SAAA,CAAU,WAA+B,EAAA,KAAA,EAAe,aAC/D,EAAA;AACI,IAAM,MAAA,OAAA,GAAU,KAAK,YAAa,CAAA,OAAA,CAAA;AAElC,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,WAAW,CACpC,EAAA,EAAA;AACI,MAAY,WAAA,CAAA,KAAA,EAAO,IAAI,OAAQ,CAAA,CAAA,GAAI,KAAK,WAAW,CAAA,GAAI,gBAAgB,IAAK,CAAA,YAAA,CAAA;AAAA,KAChF;AAAA,GACJ;AAAA,EAEO,cACH,CAAA,WAAA,EACA,UACA,EAAA,KAAA,EACA,SAEJ,EAAA;AACI,IAAA,MAAM,WAAW,IAAK,CAAA,YAAA,CAAA;AACtB,IAAA,MAAM,WAAW,IAAK,CAAA,UAAA,CAAA;AAEtB,IAAA,MAAM,YAAY,QAAS,CAAA,QAAA,CAAA;AAC3B,IAAA,MAAM,MAAM,QAAS,CAAA,GAAA,CAAA;AAErB,IAAM,MAAA,MAAA,GAAS,KAAK,YAAe,GAAA,CAAA,CAAA;AACnC,IAAA,MAAM,QAAY,GAAA,CAAA,IAAA,CAAK,YAAe,GAAA,IAAA,CAAK,UAAc,IAAA,CAAA,CAAA;AAEzD,IAAA,MAAM,MAAM,IAAK,CAAA,KAAA,CAAA;AACjB,IAAA,MAAM,MAAO,GAAO,IAAA,EAAA,GAAO,GAAM,GAAA,KAAA,GAAA,CAAY,MAAM,GAAS,KAAA,EAAA,CAAA;AAE5D,IAAA,IAAI,KAAK,cACT,EAAA;AACI,MAAM,MAAA,IAAA,GAAO,iBAAkB,CAAA,GAAA,EAAK,QAAS,CAAA,UAAU,KACnD,IAAK,CAAA,KAAA,GAAQ,QAAS,CAAA,UAAA,GAAa,GAAQ,IAAA,EAAA,CAAA,CAAA;AAE/C,MAAA,MAAM,KAAK,QAAS,CAAA,cAAA,CAAA;AACpB,MAAA,MAAM,iBAAqB,GAAA,SAAA,IAAa,EAAO,GAAA,IAAA,CAAK,WAAc,GAAA,KAAA,CAAA;AAElE,MAAA,MAAM,IAAI,EAAG,CAAA,CAAA,CAAA;AACb,MAAA,MAAM,IAAI,EAAG,CAAA,CAAA,CAAA;AACb,MAAA,MAAM,IAAI,EAAG,CAAA,CAAA,CAAA;AACb,MAAA,MAAM,IAAI,EAAG,CAAA,CAAA,CAAA;AACb,MAAA,MAAM,KAAK,EAAG,CAAA,EAAA,CAAA;AACd,MAAA,MAAM,KAAK,EAAG,CAAA,EAAA,CAAA;AAEd,MAAA,KAAA,IAAS,CAAI,GAAA,MAAA,EAAQ,CAAI,GAAA,QAAA,EAAU,KAAK,CACxC,EAAA;AACI,QAAM,MAAA,CAAA,GAAI,UAAU,CAAC,CAAA,CAAA;AACrB,QAAM,MAAA,CAAA,GAAI,SAAU,CAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAEzB,QAAA,WAAA,CAAY,KAAK,CAAA,GAAK,CAAI,GAAA,CAAA,GAAM,IAAI,CAAK,GAAA,EAAA,CAAA;AACzC,QAAA,WAAA,CAAY,QAAQ,CAAC,CAAA,GAAK,CAAI,GAAA,CAAA,GAAM,IAAI,CAAK,GAAA,EAAA,CAAA;AAE7C,QAAA,WAAA,CAAY,KAAQ,GAAA,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AAC9B,QAAA,WAAA,CAAY,KAAQ,GAAA,CAAC,CAAI,GAAA,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA;AAElC,QAAW,UAAA,CAAA,KAAA,GAAQ,CAAC,CAAI,GAAA,IAAA,CAAA;AACxB,QAAW,UAAA,CAAA,KAAA,GAAQ,CAAC,CAAI,GAAA,iBAAA,CAAA;AAExB,QAAS,KAAA,IAAA,CAAA,CAAA;AAAA,OACb;AAAA,KAGJ,MAAA;AACI,MAAA,MAAM,IAAO,GAAA,GAAA,IAAQ,IAAK,CAAA,KAAA,GAAQ,GAAQ,IAAA,EAAA,CAAA,CAAA;AAE1C,MAAA,KAAA,IAAS,CAAI,GAAA,MAAA,EAAQ,CAAI,GAAA,QAAA,EAAU,KAAK,CACxC,EAAA;AACI,QAAY,WAAA,CAAA,KAAK,CAAI,GAAA,SAAA,CAAU,CAAC,CAAA,CAAA;AAChC,QAAA,WAAA,CAAY,KAAQ,GAAA,CAAC,CAAI,GAAA,SAAA,CAAU,IAAI,CAAC,CAAA,CAAA;AAExC,QAAA,WAAA,CAAY,KAAQ,GAAA,CAAC,CAAI,GAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AAC9B,QAAA,WAAA,CAAY,KAAQ,GAAA,CAAC,CAAI,GAAA,GAAA,CAAI,IAAI,CAAC,CAAA,CAAA;AAElC,QAAW,UAAA,CAAA,KAAA,GAAQ,CAAC,CAAI,GAAA,IAAA,CAAA;AACxB,QAAW,UAAA,CAAA,KAAA,GAAQ,CAAC,CAAA,GAAI,SAAa,IAAA,EAAA,CAAA;AAErC,QAAS,KAAA,IAAA,CAAA,CAAA;AAAA,OACb;AAAA,KACJ;AAAA,GACJ;AAAA;AAAA,EAGA,IAAI,QACJ,GAAA;AACI,IAAA,OAAO,IAAK,CAAA,UAAA,CAAA;AAAA,GAChB;AAAA,EAEO,OAAO,SACd,EAAA;AACI,IAAA,SAAA,CAAU,cAAc,IAAK,CAAA,WAAA,CAAA;AAC7B,IAAA,SAAA,CAAU,YAAY,IAAK,CAAA,SAAA,CAAA;AAE3B,IAAA,SAAA,CAAU,eAAe,IAAK,CAAA,YAAA,CAAA;AAC9B,IAAA,SAAA,CAAU,aAAa,IAAK,CAAA,UAAA,CAAA;AAE5B,IAAA,SAAA,CAAU,QAAQ,IAAK,CAAA,KAAA,CAAA;AACvB,IAAA,SAAA,CAAU,QAAQ,IAAK,CAAA,KAAA,CAAA;AAEvB,IAAA,SAAA,CAAU,UAAU,IAAK,CAAA,OAAA,CAAA;AACzB,IAAA,SAAA,CAAU,eAAe,IAAK,CAAA,YAAA,CAAA;AAAA,GAClC;AAAA,EAEO,KACP,GAAA;AACI,IAAA,IAAA,CAAK,cAAiB,GAAA,IAAA,CAAA;AAAA,GAC1B;AACJ;;;;"}