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

91 lines (87 loc) 3.42 kB
'use strict'; var Extensions = require('../../extensions/Extensions.js'); var Matrix = require('../../maths/matrix/Matrix.js'); var PoolGroup = require('../../utils/pool/PoolGroup.js'); var BatchableSprite = require('../sprite/BatchableSprite.js'); var executeInstructions = require('./utils/executeInstructions.js'); "use strict"; const tempMatrix = new Matrix.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) { PoolGroup.BigPool.return(renderGroup._batchableRenderGroup); renderGroup._batchableRenderGroup = null; } instructionSet.add(renderGroup); } _addRenderableCacheAsTexture(renderGroup, instructionSet) { const batchableRenderGroup = renderGroup._batchableRenderGroup ?? (renderGroup._batchableRenderGroup = PoolGroup.BigPool.get(BatchableSprite.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.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.executeInstructions(renderGroup, this._renderer.renderPipes); this._renderer.globalUniforms.pop(); } } RenderGroupPipe.extension = { type: [ Extensions.ExtensionType.WebGLPipes, Extensions.ExtensionType.WebGPUPipes, Extensions.ExtensionType.CanvasPipes ], name: "renderGroup" }; exports.RenderGroupPipe = RenderGroupPipe; //# sourceMappingURL=RenderGroupPipe.js.map