108 lines
6.5 KiB
JavaScript
108 lines
6.5 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$scene$container$RenderGroupSystem = function(global, require, module, exports) {
|
|
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
|
|
module = require("module$node_modules$pixi_DOT_js$lib$maths$matrix$Matrix");
|
|
var TexturePool = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$TexturePool"), TextureStyle = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$TextureStyle"), Bounds = require("module$node_modules$pixi_DOT_js$lib$scene$container$bounds$Bounds"), clearList = require("module$node_modules$pixi_DOT_js$lib$scene$container$utils$clearList"), executeInstructions = require("module$node_modules$pixi_DOT_js$lib$scene$container$utils$executeInstructions"),
|
|
updateRenderGroupTransforms = require("module$node_modules$pixi_DOT_js$lib$scene$container$utils$updateRenderGroupTransforms"), validateRenderables = require("module$node_modules$pixi_DOT_js$lib$scene$container$utils$validateRenderables");
|
|
"use strict";
|
|
const tempMatrix = new module.Matrix();
|
|
class RenderGroupSystem {
|
|
constructor(renderer) {
|
|
this._renderer = renderer;
|
|
}
|
|
render({container, transform}) {
|
|
const parent = container.parent, renderGroupParent = container.renderGroup.renderGroupParent;
|
|
container.parent = null;
|
|
container.renderGroup.renderGroupParent = null;
|
|
const renderer = this._renderer;
|
|
transform && (tempMatrix.copyFrom(container.renderGroup.localTransform), container.renderGroup.localTransform.copyFrom(transform));
|
|
const renderPipes = renderer.renderPipes;
|
|
this._updateCachedRenderGroups(container.renderGroup, null);
|
|
this._updateRenderGroups(container.renderGroup);
|
|
renderer.globalUniforms.start({worldTransformMatrix:transform ? container.renderGroup.localTransform : container.renderGroup.worldTransform, worldColor:container.renderGroup.worldColorAlpha});
|
|
executeInstructions.executeInstructions(container.renderGroup, renderPipes);
|
|
renderPipes.uniformBatch && renderPipes.uniformBatch.renderEnd();
|
|
transform && container.renderGroup.localTransform.copyFrom(tempMatrix);
|
|
container.parent = parent;
|
|
container.renderGroup.renderGroupParent = renderGroupParent;
|
|
}
|
|
destroy() {
|
|
this._renderer = null;
|
|
}
|
|
_updateCachedRenderGroups(renderGroup, closestCacheAsTexture) {
|
|
renderGroup._parentCacheAsTextureRenderGroup = closestCacheAsTexture;
|
|
if (renderGroup.isCachedAsTexture) {
|
|
if (!renderGroup.textureNeedsUpdate) {
|
|
return;
|
|
}
|
|
closestCacheAsTexture = renderGroup;
|
|
}
|
|
for (var i = renderGroup.renderGroupChildren.length - 1; 0 <= i; i--) {
|
|
this._updateCachedRenderGroups(renderGroup.renderGroupChildren[i], closestCacheAsTexture);
|
|
}
|
|
renderGroup.invalidateMatrices();
|
|
if (renderGroup.isCachedAsTexture) {
|
|
if (renderGroup.textureNeedsUpdate) {
|
|
closestCacheAsTexture = renderGroup.root.getLocalBounds();
|
|
var renderer = this._renderer;
|
|
i = renderGroup.textureOptions.resolution || renderer.view.resolution;
|
|
const antialias = renderGroup.textureOptions.antialias ?? renderer.view.antialias;
|
|
renderer = renderGroup.textureOptions.scaleMode ?? "linear";
|
|
const lastTexture = renderGroup.texture;
|
|
closestCacheAsTexture.ceil();
|
|
renderGroup.texture && TexturePool.TexturePool.returnTexture(renderGroup.texture, !0);
|
|
i = TexturePool.TexturePool.getOptimalTexture(closestCacheAsTexture.width, closestCacheAsTexture.height, i, antialias);
|
|
i._source.style = new TextureStyle.TextureStyle({scaleMode:renderer});
|
|
renderGroup.texture = i;
|
|
renderGroup._textureBounds || (renderGroup._textureBounds = new Bounds.Bounds());
|
|
renderGroup._textureBounds.copyFrom(closestCacheAsTexture);
|
|
lastTexture !== renderGroup.texture && renderGroup.renderGroupParent && (renderGroup.renderGroupParent.structureDidChange = !0);
|
|
}
|
|
} else {
|
|
renderGroup.texture && (TexturePool.TexturePool.returnTexture(renderGroup.texture, !0), renderGroup.texture = null);
|
|
}
|
|
}
|
|
_updateRenderGroups(renderGroup) {
|
|
var renderer = this._renderer;
|
|
const renderPipes = renderer.renderPipes;
|
|
renderGroup.runOnRender(renderer);
|
|
renderGroup.instructionSet.renderPipes = renderPipes;
|
|
renderGroup.structureDidChange ? clearList.clearList(renderGroup.childrenRenderablesToUpdate.list, 0) : validateRenderables.validateRenderables(renderGroup, renderPipes);
|
|
updateRenderGroupTransforms.updateRenderGroupTransforms(renderGroup);
|
|
renderGroup.structureDidChange ? (renderGroup.structureDidChange = !1, this._buildInstructions(renderGroup, renderer)) : this._updateRenderables(renderGroup);
|
|
renderGroup.childrenRenderablesToUpdate.index = 0;
|
|
renderer.renderPipes.batch.upload(renderGroup.instructionSet);
|
|
if (!renderGroup.isCachedAsTexture || renderGroup.textureNeedsUpdate) {
|
|
for (renderer = 0; renderer < renderGroup.renderGroupChildren.length; renderer++) {
|
|
this._updateRenderGroups(renderGroup.renderGroupChildren[renderer]);
|
|
}
|
|
}
|
|
}
|
|
_updateRenderables(renderGroup) {
|
|
const {list, index} = renderGroup.childrenRenderablesToUpdate;
|
|
for (let i = 0; i < index; i++) {
|
|
const container = list[i];
|
|
container.didViewUpdate && renderGroup.updateRenderable(container);
|
|
}
|
|
clearList.clearList(list, index);
|
|
}
|
|
_buildInstructions(renderGroup, rendererOrPipes) {
|
|
const root = renderGroup.root;
|
|
renderGroup = renderGroup.instructionSet;
|
|
renderGroup.reset();
|
|
rendererOrPipes = rendererOrPipes.renderPipes ? rendererOrPipes : rendererOrPipes.batch.renderer;
|
|
const renderPipes = rendererOrPipes.renderPipes;
|
|
renderPipes.batch.buildStart(renderGroup);
|
|
renderPipes.blendMode.buildStart();
|
|
renderPipes.colorMask.buildStart();
|
|
root.sortableChildren && root.sortChildren();
|
|
root.collectRenderablesWithEffects(renderGroup, rendererOrPipes, null);
|
|
renderPipes.batch.buildEnd(renderGroup);
|
|
renderPipes.blendMode.buildEnd(renderGroup);
|
|
}
|
|
}
|
|
RenderGroupSystem.extension = {type:[global.ExtensionType.WebGLSystem, global.ExtensionType.WebGPUSystem, global.ExtensionType.CanvasSystem], name:"renderGroup"};
|
|
exports.RenderGroupSystem = RenderGroupSystem;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$scene$container$RenderGroupSystem.js.map
|