UNPKG

pixi.js

Version:

<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">

1 lines 11.4 kB
{"version":3,"file":"GraphicsPipe.mjs","sources":["../../../../src/scene/graphics/shared/GraphicsPipe.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { State } from '../../../rendering/renderers/shared/state/State';\nimport { type Renderer } from '../../../rendering/renderers/types';\nimport { BigPool } from '../../../utils/pool/PoolGroup';\nimport { color32BitToUniform } from '../gpu/colorToUniform';\nimport { BatchableGraphics } from './BatchableGraphics';\n\nimport type { InstructionSet } from '../../../rendering/renderers/shared/instructions/InstructionSet';\nimport type { RenderPipe } from '../../../rendering/renderers/shared/instructions/RenderPipe';\nimport type { Shader } from '../../../rendering/renderers/shared/shader/Shader';\nimport type { PoolItem } from '../../../utils/pool/Pool';\nimport type { Graphics } from './Graphics';\nimport type { GpuGraphicsContext } from './GraphicsContextSystem';\n\n/** @internal */\nexport interface GraphicsAdaptor\n{\n shader: Shader;\n contextChange(renderer: Renderer): void;\n execute(graphicsPipe: GraphicsPipe, renderable: Graphics): void;\n destroy(): void;\n}\n\n/** @internal */\nexport class GraphicsGpuData\n{\n public batches: BatchableGraphics[] = [];\n public batched = false;\n public destroy()\n {\n this.batches.forEach((batch) =>\n {\n BigPool.return(batch as PoolItem);\n });\n\n this.batches.length = 0;\n }\n}\n\n/** @internal */\nexport class GraphicsPipe implements RenderPipe<Graphics>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes,\n ],\n name: 'graphics',\n } as const;\n\n public renderer: Renderer;\n public state: State = State.for2d();\n\n private _adaptor: GraphicsAdaptor;\n\n constructor(renderer: Renderer, adaptor: GraphicsAdaptor)\n {\n this.renderer = renderer;\n\n this._adaptor = adaptor;\n\n this.renderer.runners.contextChange.add(this);\n }\n\n public contextChange(): void\n {\n this._adaptor.contextChange(this.renderer);\n }\n\n public validateRenderable(graphics: Graphics): boolean\n {\n // assume context is dirty..\n const context = graphics.context;\n\n const wasBatched = !!graphics._gpuData;\n\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(context);\n\n if (gpuContext.isBatchable || wasBatched !== gpuContext.isBatchable)\n {\n // TODO what if they are the same size??\n return true;\n }\n\n return false;\n }\n\n public addRenderable(graphics: Graphics, instructionSet: InstructionSet)\n {\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(graphics.context);\n\n // need to get batches here.. as we need to know if we can batch or not..\n // this also overrides the current batches..\n if (graphics.didViewUpdate)\n {\n this._rebuild(graphics);\n }\n\n if (gpuContext.isBatchable)\n {\n this._addToBatcher(graphics, instructionSet);\n }\n else\n {\n this.renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add(graphics);\n }\n }\n\n public updateRenderable(graphics: Graphics)\n {\n const gpuData = this._getGpuDataForRenderable(graphics);\n\n const batches = gpuData.batches;\n\n for (let i = 0; i < batches.length; i++)\n {\n const batch = batches[i];\n\n batch._batcher.updateElement(batch);\n }\n }\n\n public execute(graphics: Graphics)\n {\n if (!graphics.isRenderable) return;\n\n const renderer = this.renderer;\n const context = graphics.context;\n const contextSystem = renderer.graphicsContext;\n\n // early out if there is no actual visual stuff...\n if (!contextSystem.getGpuContext(context).batches.length)\n { return; }\n\n const shader = context.customShader || this._adaptor.shader;\n\n this.state.blendMode = graphics.groupBlendMode;\n\n const localUniforms = shader.resources.localUniforms.uniforms;\n\n localUniforms.uTransformMatrix = graphics.groupTransform;\n localUniforms.uRound = renderer._roundPixels | graphics._roundPixels;\n\n color32BitToUniform(\n graphics.groupColorAlpha,\n localUniforms.uColor,\n 0,\n );\n\n this._adaptor.execute(this, graphics);\n }\n\n private _rebuild(graphics: Graphics)\n {\n const gpuData = this._getGpuDataForRenderable(graphics);\n\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(graphics.context);\n\n // free up the batches..\n gpuData.destroy();\n\n if (gpuContext.isBatchable)\n {\n this._updateBatchesForRenderable(graphics, gpuData);\n }\n }\n\n private _addToBatcher(graphics: Graphics, instructionSet: InstructionSet)\n {\n const batchPipe = this.renderer.renderPipes.batch;\n\n const batches = this._getGpuDataForRenderable(graphics).batches;\n\n for (let i = 0; i < batches.length; i++)\n {\n const batch = batches[i];\n\n batchPipe.addToBatch(batch, instructionSet);\n }\n }\n\n private _getGpuDataForRenderable(graphics: Graphics): GraphicsGpuData\n {\n return graphics._gpuData[this.renderer.uid] || this._initGpuDataForRenderable(graphics);\n }\n\n private _initGpuDataForRenderable(graphics: Graphics): GraphicsGpuData\n {\n const gpuData = new GraphicsGpuData();\n\n graphics._gpuData[this.renderer.uid] = gpuData;\n\n return gpuData;\n }\n\n private _updateBatchesForRenderable(graphics: Graphics, gpuData: GraphicsGpuData)\n {\n const context = graphics.context;\n\n const gpuContext: GpuGraphicsContext = this.renderer.graphicsContext.getGpuContext(context);\n\n const roundPixels = (this.renderer._roundPixels | graphics._roundPixels) as 0 | 1;\n\n gpuData.batches = gpuContext.batches.map((batch) =>\n {\n const batchClone = BigPool.get(BatchableGraphics);\n\n batch.copyTo(batchClone);\n\n batchClone.renderable = graphics;\n\n batchClone.roundPixels = roundPixels;\n\n return batchClone;\n });\n }\n\n public destroy()\n {\n this.renderer = null;\n\n this._adaptor.destroy();\n this._adaptor = null;\n this.state = null;\n }\n}\n"],"names":[],"mappings":"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"}