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">

89 lines (86 loc) 3.29 kB
import { ExtensionType } from '../../extensions/Extensions.mjs'; import { Matrix } from '../../maths/matrix/Matrix.mjs'; import { BigPool } from '../../utils/pool/PoolGroup.mjs'; import { BatchableSprite } from '../sprite/BatchableSprite.mjs'; import { executeInstructions } from './utils/executeInstructions.mjs'; "use strict"; const tempMatrix = new Matrix(); class RenderGroupPipe { constructor(renderer) { this._renderer = renderer; } addRenderGroup(renderGroup, instructionSet) { if (renderGroup.isCachedAsTexture) { this._addRenderableCacheAsTexture(renderGroup, instructionSet); } else { this._addRenderableDirect(renderGroup, instructionSet); } } execute(renderGroup) { if (!renderGroup.isRenderable) return; if (renderGroup.isCachedAsTexture) { this._executeCacheAsTexture(renderGroup); } else { this._executeDirect(renderGroup); } } destroy() { this._renderer = null; } _addRenderableDirect(renderGroup, instructionSet) { this._renderer.renderPipes.batch.break(instructionSet); if (renderGroup._batchableRenderGroup) { BigPool.return(renderGroup._batchableRenderGroup); renderGroup._batchableRenderGroup = null; } instructionSet.add(renderGroup); } _addRenderableCacheAsTexture(renderGroup, instructionSet) { const batchableRenderGroup = renderGroup._batchableRenderGroup ?? (renderGroup._batchableRenderGroup = BigPool.get(BatchableSprite)); batchableRenderGroup.renderable = renderGroup.root; batchableRenderGroup.transform = renderGroup.root.relativeGroupTransform; batchableRenderGroup.texture = renderGroup.texture; batchableRenderGroup.bounds = renderGroup._textureBounds; instructionSet.add(renderGroup); this._renderer.renderPipes.batch.addToBatch(batchableRenderGroup, instructionSet); } _executeCacheAsTexture(renderGroup) { if (renderGroup.textureNeedsUpdate) { renderGroup.textureNeedsUpdate = false; const worldTransformMatrix = tempMatrix.identity().translate( -renderGroup._textureBounds.x, -renderGroup._textureBounds.y ); this._renderer.renderTarget.push(renderGroup.texture, true, null, renderGroup.texture.frame); this._renderer.globalUniforms.push({ worldTransformMatrix, worldColor: 4294967295 }); executeInstructions(renderGroup, this._renderer.renderPipes); this._renderer.renderTarget.finishRenderPass(); this._renderer.renderTarget.pop(); this._renderer.globalUniforms.pop(); } renderGroup._batchableRenderGroup._batcher.updateElement(renderGroup._batchableRenderGroup); renderGroup._batchableRenderGroup._batcher.geometry.buffers[0].update(); } _executeDirect(renderGroup) { this._renderer.globalUniforms.push({ worldTransformMatrix: renderGroup.inverseParentTextureTransform, worldColor: renderGroup.worldColorAlpha }); executeInstructions(renderGroup, this._renderer.renderPipes); this._renderer.globalUniforms.pop(); } } RenderGroupPipe.extension = { type: [ ExtensionType.WebGLPipes, ExtensionType.WebGPUPipes, ExtensionType.CanvasPipes ], name: "renderGroup" }; export { RenderGroupPipe }; //# sourceMappingURL=RenderGroupPipe.mjs.map