{"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            ExtensionType.CanvasPipes,\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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"}