Files
nothoughts/node_modules/pixi.js/lib/scene/container/RenderGroupSystem.js
2025-08-04 18:57:35 +02:00

91 lines
3.4 KiB
JavaScript

'use strict';
var Extensions = require('../../extensions/Extensions.js');
var Matrix = require('../../maths/matrix/Matrix.js');
var buildInstructions = require('./utils/buildInstructions.js');
var clearList = require('./utils/clearList.js');
var collectRenderGroups = require('./utils/collectRenderGroups.js');
var executeInstructions = require('./utils/executeInstructions.js');
var updateRenderGroupTransforms = require('./utils/updateRenderGroupTransforms.js');
var validateRenderables = require('./utils/validateRenderables.js');
"use strict";
const tempMatrix = new Matrix.Matrix();
class RenderGroupSystem {
constructor(renderer) {
this._renderer = renderer;
}
render({ container, transform }) {
container.isRenderGroup = true;
const parent = container.parent;
const renderGroupParent = container.renderGroup.renderGroupParent;
container.parent = null;
container.renderGroup.renderGroupParent = null;
const renderer = this._renderer;
const renderGroups = collectRenderGroups.collectRenderGroups(container.renderGroup, []);
let originalLocalTransform = tempMatrix;
if (transform) {
originalLocalTransform = originalLocalTransform.copyFrom(container.renderGroup.localTransform);
container.renderGroup.localTransform.copyFrom(transform);
}
const renderPipes = renderer.renderPipes;
for (let i = 0; i < renderGroups.length; i++) {
const renderGroup = renderGroups[i];
renderGroup.runOnRender();
renderGroup.instructionSet.renderPipes = renderPipes;
if (!renderGroup.structureDidChange) {
validateRenderables.validateRenderables(renderGroup, renderPipes);
} else {
clearList.clearList(renderGroup.childrenRenderablesToUpdate.list, 0);
}
updateRenderGroupTransforms.updateRenderGroupTransforms(renderGroup);
if (renderGroup.structureDidChange) {
renderGroup.structureDidChange = false;
buildInstructions.buildInstructions(renderGroup, renderer);
} else {
updateRenderables(renderGroup);
}
renderGroup.childrenRenderablesToUpdate.index = 0;
renderer.renderPipes.batch.upload(renderGroup.instructionSet);
}
renderer.globalUniforms.start({
worldTransformMatrix: transform ? container.renderGroup.localTransform : container.renderGroup.worldTransform,
worldColor: container.renderGroup.worldColorAlpha
});
executeInstructions.executeInstructions(container.renderGroup, renderPipes);
if (renderPipes.uniformBatch) {
renderPipes.uniformBatch.renderEnd();
}
if (transform) {
container.renderGroup.localTransform.copyFrom(originalLocalTransform);
}
container.parent = parent;
container.renderGroup.renderGroupParent = renderGroupParent;
}
destroy() {
this._renderer = null;
}
}
/** @ignore */
RenderGroupSystem.extension = {
type: [
Extensions.ExtensionType.WebGLSystem,
Extensions.ExtensionType.WebGPUSystem,
Extensions.ExtensionType.CanvasSystem
],
name: "renderGroup"
};
function updateRenderables(renderGroup) {
const { list, index } = renderGroup.childrenRenderablesToUpdate;
for (let i = 0; i < index; i++) {
const container = list[i];
if (container.didViewUpdate) {
renderGroup.updateRenderable(container);
}
}
clearList.clearList(list, index);
}
exports.RenderGroupSystem = RenderGroupSystem;
//# sourceMappingURL=RenderGroupSystem.js.map