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 • 8.82 kB
Source Map (JSON)
{"version":3,"file":"ParticleContainerPipe.mjs","sources":["../../../../src/scene/particle-container/shared/ParticleContainerPipe.ts"],"sourcesContent":["import { ExtensionType } from '../../../extensions/Extensions';\nimport { Matrix } from '../../../maths/matrix/Matrix';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup';\nimport { getAdjustedBlendModeBlend } from '../../../rendering/renderers/shared/state/getAdjustedBlendModeBlend';\nimport { State } from '../../../rendering/renderers/shared/state/State';\nimport { GCManagedHash } from '../../../utils/data/GCManagedHash';\nimport { color32BitToUniform } from '../../graphics/gpu/colorToUniform';\nimport { ParticleBuffer } from './ParticleBuffer';\nimport { ParticleShader } from './shader/ParticleShader';\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 { Renderer } from '../../../rendering/renderers/types';\nimport type { ParticleContainer } from './ParticleContainer';\n\n/** @internal */\nexport interface ParticleContainerAdaptor\n{\n execute(particleContainerPop: ParticleContainerPipe, container: ParticleContainer): void;\n}\n\n/**\n * Renderer for Particles that is designer for speed over feature set.\n * @category scene\n * @internal\n */\nexport class ParticleContainerPipe implements RenderPipe<ParticleContainer>\n{\n /** @ignore */\n public static extension: { type: ExtensionType[]; name: 'particle' } = {\n type: [\n ExtensionType.CanvasPipes,\n ],\n name: 'particle',\n } as const;\n\n /** The default shader that is used if a sprite doesn't have a more specific one. */\n public defaultShader: Shader;\n\n /** @internal */\n public adaptor: ParticleContainerAdaptor;\n /** @internal */\n public readonly state = State.for2d();\n /** @internal */\n public readonly renderer: Renderer;\n private readonly _managedContainers: GCManagedHash<ParticleContainer>;\n\n /** Local uniforms that are used for rendering particles. */\n public readonly localUniforms = new UniformGroup({\n uTranslationMatrix: { value: new Matrix(), type: 'mat3x3<f32>' },\n uColor: { value: new Float32Array(4), type: 'vec4<f32>' },\n uRound: { value: 1, type: 'f32' },\n uResolution: { value: [0, 0], type: 'vec2<f32>' },\n });\n\n /**\n * @param renderer - The renderer this sprite batch works for.\n * @param adaptor\n */\n constructor(renderer: Renderer, adaptor: ParticleContainerAdaptor)\n {\n this.renderer = renderer;\n\n this.adaptor = adaptor;\n\n this.defaultShader = new ParticleShader();\n\n this.state = State.for2d();\n\n this._managedContainers = new GCManagedHash({ renderer, type: 'renderable', name: 'particleContainer' });\n }\n\n public validateRenderable(_renderable: ParticleContainer): boolean\n {\n // always fine :D\n return false;\n }\n\n public addRenderable(renderable: ParticleContainer, instructionSet: InstructionSet)\n {\n this.renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add(renderable);\n }\n\n public getBuffers(renderable: ParticleContainer): ParticleBuffer\n {\n return renderable._gpuData[this.renderer.uid] || this._initBuffer(renderable);\n }\n\n private _initBuffer(renderable: ParticleContainer): ParticleBuffer\n {\n renderable._gpuData[this.renderer.uid] = new ParticleBuffer({\n size: renderable.particleChildren.length,\n properties: renderable._properties,\n });\n\n this._managedContainers.add(renderable);\n\n return renderable._gpuData[this.renderer.uid];\n }\n\n public updateRenderable(_renderable: ParticleContainer)\n {\n // nothing to be done here!\n }\n\n public execute(container: ParticleContainer): void\n {\n const children = container.particleChildren;\n\n if (children.length === 0)\n {\n return;\n }\n\n const renderer = this.renderer;\n const buffer = this.getBuffers(container);\n\n container.texture ||= children[0].texture;\n\n const state = this.state;\n\n buffer.update(children, container._childrenDirty);\n container._childrenDirty = false;\n\n state.blendMode = getAdjustedBlendModeBlend(container.blendMode, container.texture._source);\n\n const uniforms = this.localUniforms.uniforms;\n\n const transformationMatrix = uniforms.uTranslationMatrix;\n\n container.worldTransform.copyTo(transformationMatrix);\n\n // Apply the global offset from filters (e.g., when using filterArea)\n const globalUniformData = renderer.globalUniforms.globalUniformData;\n\n transformationMatrix.tx -= globalUniformData.offset.x;\n transformationMatrix.ty -= globalUniformData.offset.y;\n\n transformationMatrix.prepend(globalUniformData.projectionMatrix);\n\n uniforms.uResolution = globalUniformData.resolution;\n uniforms.uRound = renderer._roundPixels | container._roundPixels;\n\n color32BitToUniform(\n container.groupColorAlpha,\n uniforms.uColor,\n 0\n );\n\n this.adaptor.execute(this, container);\n }\n\n /** Destroys the ParticleRenderer. */\n public destroy(): void\n {\n this._managedContainers.destroy();\n (this.renderer as null) = null;\n if (this.defaultShader)\n {\n this.defaultShader.destroy();\n this.defaultShader = null;\n }\n }\n}\n"],"names":[],"mappings":"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"}