{"version":3,"file":"NineSliceSpritePipe.mjs","sources":["../../../src/scene/sprite-nine-slice/NineSliceSpritePipe.ts"],"sourcesContent":["import { ExtensionType } from '../../extensions/Extensions';\nimport { GCManagedHash } from '../../utils/data/GCManagedHash';\nimport { BatchableMesh } from '../mesh/shared/BatchableMesh';\nimport { type GPUData } from '../view/ViewContainer';\nimport { NineSliceGeometry } from './NineSliceGeometry';\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 { NineSliceSprite } from './NineSliceSprite';\n\n/**\n * GPU data for NineSliceSprite.\n * @internal\n */\nexport class NineSliceSpriteGpuData extends BatchableMesh implements GPUData\n{\n    constructor()\n    {\n        super();\n        this.geometry = new NineSliceGeometry();\n    }\n\n    public destroy()\n    {\n        this.geometry.destroy();\n    }\n}\n\n/**\n * The NineSliceSpritePipe is a render pipe for rendering NineSliceSprites.\n * @internal\n */\nexport class NineSliceSpritePipe implements RenderPipe<NineSliceSprite>\n{\n    /** @ignore */\n    public static extension = {\n        type: [\n            ExtensionType.WebGLPipes,\n            ExtensionType.WebGPUPipes,\n        ],\n        name: 'nineSliceSprite',\n    } as const;\n\n    private readonly _renderer: Renderer;\n    private readonly _managedSprites: GCManagedHash<NineSliceSprite>;\n\n    constructor(renderer: Renderer)\n    {\n        this._renderer = renderer;\n        this._managedSprites = new GCManagedHash({ renderer, type: 'renderable', name: 'nineSliceSprite' });\n    }\n\n    public addRenderable(sprite: NineSliceSprite, instructionSet: InstructionSet)\n    {\n        const gpuSprite = this._getGpuSprite(sprite);\n\n        if (sprite.didViewUpdate) this._updateBatchableSprite(sprite, gpuSprite);\n\n        this._renderer.renderPipes.batch.addToBatch(gpuSprite, instructionSet);\n    }\n\n    public updateRenderable(sprite: NineSliceSprite)\n    {\n        const gpuSprite = this._getGpuSprite(sprite);\n\n        if (sprite.didViewUpdate) this._updateBatchableSprite(sprite, gpuSprite);\n\n        gpuSprite._batcher.updateElement(gpuSprite);\n    }\n\n    public validateRenderable(sprite: NineSliceSprite): boolean\n    {\n        const gpuSprite = this._getGpuSprite(sprite);\n\n        return !gpuSprite._batcher.checkAndUpdateTexture(\n            gpuSprite,\n            sprite._texture\n        );\n    }\n\n    private _updateBatchableSprite(sprite: NineSliceSprite, batchableSprite: BatchableMesh)\n    {\n        (batchableSprite.geometry as NineSliceGeometry)\n            .update(sprite);\n\n        // = sprite.bounds;\n        batchableSprite.setTexture(sprite._texture);\n    }\n\n    private _getGpuSprite(sprite: NineSliceSprite): NineSliceSpriteGpuData\n    {\n        return sprite._gpuData[this._renderer.uid] || this._initGPUSprite(sprite);\n    }\n\n    private _initGPUSprite(sprite: NineSliceSprite): NineSliceSpriteGpuData\n    {\n        const gpuData = sprite._gpuData[this._renderer.uid] = new NineSliceSpriteGpuData();\n\n        const batchableMesh = gpuData;\n\n        batchableMesh.renderable = sprite;\n        batchableMesh.transform = sprite.groupTransform;\n        batchableMesh.texture = sprite._texture;\n        batchableMesh.roundPixels = (this._renderer._roundPixels | sprite._roundPixels) as 0 | 1;\n\n        this._managedSprites.add(sprite);\n\n        // if the sprite has not been updated by the view, we need to update the batchable mesh now.\n        if (!sprite.didViewUpdate)\n        {\n            this._updateBatchableSprite(sprite, batchableMesh);\n        }\n\n        return gpuData;\n    }\n\n    public destroy()\n    {\n        this._managedSprites.destroy();\n        (this._renderer as null) = null;\n    }\n}\n"],"names":[],"mappings":"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"}