{"version":3,"file":"SpritePipe.mjs","sources":["../../../src/scene/sprite/SpritePipe.ts"],"sourcesContent":["import { ExtensionType } from '../../extensions/Extensions';\nimport { BigPool } from '../../utils/pool/PoolGroup';\nimport { BatchableSprite } from './BatchableSprite';\n\nimport type { InstructionSet } from '../../rendering/renderers/shared/instructions/InstructionSet';\nimport type { RenderPipe } from '../../rendering/renderers/shared/instructions/RenderPipe';\nimport type { Renderer } from '../../rendering/renderers/types';\nimport type { PoolItem } from '../../utils/pool/Pool';\nimport type { Container } from '../container/Container';\nimport type { Sprite } from './Sprite';\n\nexport class SpritePipe implements RenderPipe<Sprite>\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLPipes,\n            ExtensionType.WebGPUPipes,\n            ExtensionType.CanvasPipes,\n        ],\n        name: 'sprite',\n    } as const;\n\n    private _renderer: Renderer;\n    private _gpuSpriteHash: Record<number, BatchableSprite> = Object.create(null);\n    private readonly _destroyRenderableBound = this.destroyRenderable.bind(this) as (renderable: Container) => void;\n\n    constructor(renderer: Renderer)\n    {\n        this._renderer = renderer;\n    }\n\n    public addRenderable(sprite: Sprite, _instructionSet: InstructionSet)\n    {\n        const gpuSprite = this._getGpuSprite(sprite);\n\n        if (sprite._didSpriteUpdate) this._updateBatchableSprite(sprite, gpuSprite);\n\n        // TODO visibility\n        this._renderer.renderPipes.batch.addToBatch(gpuSprite);\n    }\n\n    public updateRenderable(sprite: Sprite)\n    {\n        const gpuSprite = this._gpuSpriteHash[sprite.uid];\n\n        if (sprite._didSpriteUpdate) this._updateBatchableSprite(sprite, gpuSprite);\n\n        gpuSprite.batcher.updateElement(gpuSprite);\n    }\n\n    public validateRenderable(sprite: Sprite): boolean\n    {\n        const texture = sprite._texture;\n        const gpuSprite = this._getGpuSprite(sprite);\n\n        if (gpuSprite.texture._source !== texture._source)\n        {\n            return !gpuSprite.batcher.checkAndUpdateTexture(gpuSprite, texture);\n        }\n\n        return false;\n    }\n\n    public destroyRenderable(sprite: Sprite)\n    {\n        const batchableSprite = this._gpuSpriteHash[sprite.uid];\n\n        // this will call reset!\n        BigPool.return(batchableSprite as PoolItem);\n\n        this._gpuSpriteHash[sprite.uid] = null;\n\n        sprite.off('destroyed', this._destroyRenderableBound);\n    }\n\n    private _updateBatchableSprite(sprite: Sprite, batchableSprite: BatchableSprite)\n    {\n        sprite._didSpriteUpdate = false;\n        batchableSprite.bounds = sprite.bounds;\n        batchableSprite.texture = sprite._texture;\n    }\n\n    private _getGpuSprite(sprite: Sprite): BatchableSprite\n    {\n        return this._gpuSpriteHash[sprite.uid] || this._initGPUSprite(sprite);\n    }\n\n    private _initGPUSprite(sprite: Sprite): BatchableSprite\n    {\n        const batchableSprite = BigPool.get(BatchableSprite);\n\n        batchableSprite.renderable = sprite;\n\n        batchableSprite.texture = sprite._texture;\n        batchableSprite.bounds = sprite.bounds;\n        batchableSprite.roundPixels = (this._renderer._roundPixels | sprite._roundPixels) as 0 | 1;\n\n        this._gpuSpriteHash[sprite.uid] = batchableSprite;\n\n        sprite._didSpriteUpdate = false;\n\n        // TODO perhaps manage this outside this pipe? (a bit like how we update / add)\n        sprite.on('destroyed', this._destroyRenderableBound);\n\n        return batchableSprite;\n    }\n\n    public destroy()\n    {\n        for (const i in this._gpuSpriteHash)\n        {\n            BigPool.return(this._gpuSpriteHash[i] as PoolItem);\n        }\n\n        this._gpuSpriteHash = null;\n        this._renderer = null;\n    }\n}\n"],"names":[],"mappings":"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"}