Files
nothoughts/node_modules/pixi.js/lib/scene/mesh/shared/MeshPipe.mjs.map
2025-08-04 18:57:35 +02:00

1 line
13 KiB
Plaintext

{"version":3,"file":"MeshPipe.mjs","sources":["../../../../src/scene/mesh/shared/MeshPipe.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { BindGroup } from '../../../rendering/renderers/gpu/shader/BindGroup';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { getAdjustedBlendModeBlend } from '../../../rendering/renderers/shared/state/getAdjustedBlendModeBlend';\nimport { BigPool } from '../../../utils/pool/PoolGroup';\nimport { color32BitToUniform } from '../../graphics/gpu/colorToUniform';\nimport { BatchableMesh } from './BatchableMesh';\n\nimport type { InstructionSet } from '../../../rendering/renderers/shared/instructions/InstructionSet';\nimport type {\n InstructionPipe,\n RenderPipe\n} 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 { Mesh } from './Mesh';\n\n// TODO Record mode is a P2, will get back to this as it's not a priority\n// const recordMode = true;\n\ninterface MeshData\n{\n batched: boolean;\n indexSize: number;\n vertexSize: number;\n}\n\nexport interface MeshAdaptor\n{\n init(): void;\n execute(meshPipe: MeshPipe, mesh: Mesh): void;\n destroy(): void;\n}\n\n// eslint-disable-next-line max-len\nexport class MeshPipe implements RenderPipe<Mesh>, InstructionPipe<Mesh>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes,\n ],\n name: 'mesh',\n } as const;\n\n public localUniforms = new UniformGroup({\n uTransformMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: 'vec4<f32>' },\n uRound: { value: 0, type: 'f32' },\n });\n\n public localUniformsBindGroup = new BindGroup({\n 0: this.localUniforms,\n });\n\n public renderer: Renderer;\n\n private _meshDataHash: Record<number, MeshData> = Object.create(null);\n private _gpuBatchableMeshHash: Record<number, BatchableMesh> = Object.create(null);\n private _adaptor: MeshAdaptor;\n private readonly _destroyRenderableBound = this.destroyRenderable.bind(this) as (renderable: Container) => void;\n\n constructor(renderer: Renderer, adaptor: MeshAdaptor)\n {\n this.renderer = renderer;\n this._adaptor = adaptor;\n\n this._adaptor.init();\n }\n\n public validateRenderable(mesh: Mesh): boolean\n {\n const meshData = this._getMeshData(mesh);\n\n const wasBatched = meshData.batched;\n\n const isBatched = mesh.batched;\n\n meshData.batched = isBatched;\n\n if (wasBatched !== isBatched)\n {\n return true;\n }\n else if (isBatched)\n {\n const geometry = mesh._geometry;\n\n // no need to break the batch if it's the same size\n if (geometry.indices.length !== meshData.indexSize\n || geometry.positions.length !== meshData.vertexSize)\n {\n meshData.indexSize = geometry.indices.length;\n meshData.vertexSize = geometry.positions.length;\n\n return true;\n }\n\n const batchableMesh = this._getBatchableMesh(mesh);\n\n const texture = mesh.texture;\n\n if (batchableMesh.texture._source !== texture._source)\n {\n if (batchableMesh.texture._source !== texture._source)\n {\n return !batchableMesh._batcher.checkAndUpdateTexture(batchableMesh, texture);\n }\n }\n }\n\n return false;\n }\n\n public addRenderable(mesh: Mesh, instructionSet: InstructionSet)\n {\n const batcher = this.renderer.renderPipes.batch;\n\n const { batched } = this._getMeshData(mesh);\n\n if (batched)\n {\n const gpuBatchableMesh = this._getBatchableMesh(mesh);\n\n gpuBatchableMesh.texture = mesh._texture;\n gpuBatchableMesh.geometry = mesh._geometry;\n\n batcher.addToBatch(gpuBatchableMesh, instructionSet);\n }\n else\n {\n batcher.break(instructionSet);\n\n instructionSet.add(mesh);\n }\n }\n\n public updateRenderable(mesh: Mesh)\n {\n if (mesh.batched)\n {\n const gpuBatchableMesh = this._gpuBatchableMeshHash[mesh.uid];\n\n gpuBatchableMesh.texture = mesh._texture;\n gpuBatchableMesh.geometry = mesh._geometry;\n\n gpuBatchableMesh._batcher.updateElement(gpuBatchableMesh);\n }\n }\n\n public destroyRenderable(mesh: Mesh)\n {\n this._meshDataHash[mesh.uid] = null;\n\n const gpuMesh = this._gpuBatchableMeshHash[mesh.uid];\n\n if (gpuMesh)\n {\n BigPool.return(gpuMesh as PoolItem);\n this._gpuBatchableMeshHash[mesh.uid] = null;\n }\n\n mesh.off('destroyed', this._destroyRenderableBound);\n }\n\n public execute(mesh: Mesh)\n {\n if (!mesh.isRenderable) return;\n\n mesh.state.blendMode = getAdjustedBlendModeBlend(mesh.groupBlendMode, mesh.texture._source);\n\n const localUniforms = this.localUniforms;\n\n localUniforms.uniforms.uTransformMatrix = mesh.groupTransform;\n localUniforms.uniforms.uRound = this.renderer._roundPixels | mesh._roundPixels;\n localUniforms.update();\n\n color32BitToUniform(\n mesh.groupColorAlpha,\n localUniforms.uniforms.uColor,\n 0\n );\n\n this._adaptor.execute(this, mesh);\n }\n\n private _getMeshData(mesh: Mesh): MeshData\n {\n return this._meshDataHash[mesh.uid] || this._initMeshData(mesh);\n }\n\n private _initMeshData(mesh: Mesh): MeshData\n {\n this._meshDataHash[mesh.uid] = {\n batched: mesh.batched,\n indexSize: mesh._geometry.indices?.length,\n vertexSize: mesh._geometry.positions?.length,\n };\n\n mesh.on('destroyed', this._destroyRenderableBound);\n\n return this._meshDataHash[mesh.uid];\n }\n\n private _getBatchableMesh(mesh: Mesh): BatchableMesh\n {\n return this._gpuBatchableMeshHash[mesh.uid] || this._initBatchableMesh(mesh);\n }\n\n private _initBatchableMesh(mesh: Mesh): BatchableMesh\n {\n // TODO - make this batchable graphics??\n const gpuMesh: BatchableMesh = BigPool.get(BatchableMesh);\n\n gpuMesh.renderable = mesh;\n gpuMesh.texture = mesh._texture;\n gpuMesh.transform = mesh.groupTransform;\n gpuMesh.roundPixels = (this.renderer._roundPixels | mesh._roundPixels) as 0 | 1;\n\n this._gpuBatchableMeshHash[mesh.uid] = gpuMesh;\n\n return gpuMesh;\n }\n\n public destroy()\n {\n for (const i in this._gpuBatchableMeshHash)\n {\n if (this._gpuBatchableMeshHash[i])\n {\n BigPool.return(this._gpuBatchableMeshHash[i] as PoolItem);\n }\n }\n\n this._gpuBatchableMeshHash = null;\n this._meshDataHash = null;\n\n this.localUniforms = null;\n this.localUniformsBindGroup = null;\n\n this._adaptor.destroy();\n this._adaptor = null;\n\n this.renderer = null;\n }\n}\n"],"names":[],"mappings":"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"}