1 line
6.6 KiB
Plaintext
1 line
6.6 KiB
Plaintext
{"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, instructionSet);\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.transform = sprite.groupTransform;\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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"} |