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