82 lines
4.9 KiB
JavaScript
82 lines
4.9 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$renderTarget$GlobalUniformSystem = function(global, require, module, exports) {
|
|
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
|
|
var Matrix = require("module$node_modules$pixi_DOT_js$lib$maths$matrix$Matrix"), Point = require("module$node_modules$pixi_DOT_js$lib$maths$point$Point"), colorToUniform = require("module$node_modules$pixi_DOT_js$lib$scene$graphics$gpu$colorToUniform"), BindGroup = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$gpu$shader$BindGroup"), types = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$types"), UniformGroup = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$shader$UniformGroup");
|
|
"use strict";
|
|
class GlobalUniformSystem {
|
|
constructor(renderer) {
|
|
this._stackIndex = 0;
|
|
this._globalUniformDataStack = [];
|
|
this._uniformsPool = [];
|
|
this._activeUniforms = [];
|
|
this._bindGroupPool = [];
|
|
this._activeBindGroups = [];
|
|
this._renderer = renderer;
|
|
}
|
|
reset() {
|
|
this._stackIndex = 0;
|
|
for (var i = 0; i < this._activeUniforms.length; i++) {
|
|
this._uniformsPool.push(this._activeUniforms[i]);
|
|
}
|
|
for (i = 0; i < this._activeBindGroups.length; i++) {
|
|
this._bindGroupPool.push(this._activeBindGroups[i]);
|
|
}
|
|
this._activeUniforms.length = 0;
|
|
this._activeBindGroups.length = 0;
|
|
}
|
|
start(options) {
|
|
this.reset();
|
|
this.push(options);
|
|
}
|
|
bind({size, projectionMatrix, worldTransformMatrix, worldColor, offset}) {
|
|
const renderTarget = this._renderer.renderTarget.renderTarget, currentGlobalUniformData = this._stackIndex ? this._globalUniformDataStack[this._stackIndex - 1] : {projectionData:renderTarget, worldTransformMatrix:new Matrix.Matrix(), worldColor:4294967295, offset:new Point.Point()};
|
|
size = {projectionMatrix:projectionMatrix || this._renderer.renderTarget.projectionMatrix, resolution:size || renderTarget.size, worldTransformMatrix:worldTransformMatrix || currentGlobalUniformData.worldTransformMatrix, worldColor:worldColor || currentGlobalUniformData.worldColor, offset:offset || currentGlobalUniformData.offset, bindGroup:null};
|
|
projectionMatrix = this._uniformsPool.pop() || this._createUniforms();
|
|
this._activeUniforms.push(projectionMatrix);
|
|
worldTransformMatrix = projectionMatrix.uniforms;
|
|
worldTransformMatrix.uProjectionMatrix = size.projectionMatrix;
|
|
worldTransformMatrix.uResolution = size.resolution;
|
|
worldTransformMatrix.uWorldTransformMatrix.copyFrom(size.worldTransformMatrix);
|
|
worldTransformMatrix.uWorldTransformMatrix.tx -= size.offset.x;
|
|
worldTransformMatrix.uWorldTransformMatrix.ty -= size.offset.y;
|
|
colorToUniform.color32BitToUniform(size.worldColor, worldTransformMatrix.uWorldColorAlpha, 0);
|
|
projectionMatrix.update();
|
|
this._renderer.renderPipes.uniformBatch ? worldTransformMatrix = this._renderer.renderPipes.uniformBatch.getUniformBindGroup(projectionMatrix, !1) : (worldTransformMatrix = this._bindGroupPool.pop() || new BindGroup.BindGroup(), this._activeBindGroups.push(worldTransformMatrix), worldTransformMatrix.setResource(projectionMatrix, 0));
|
|
size.bindGroup = worldTransformMatrix;
|
|
this._currentGlobalUniformData = size;
|
|
}
|
|
push(options) {
|
|
this.bind(options);
|
|
this._globalUniformDataStack[this._stackIndex++] = this._currentGlobalUniformData;
|
|
}
|
|
pop() {
|
|
this._currentGlobalUniformData = this._globalUniformDataStack[--this._stackIndex - 1];
|
|
this._renderer.type === types.RendererType.WEBGL && this._currentGlobalUniformData.bindGroup.resources[0].update();
|
|
}
|
|
get bindGroup() {
|
|
return this._currentGlobalUniformData.bindGroup;
|
|
}
|
|
get globalUniformData() {
|
|
return this._currentGlobalUniformData;
|
|
}
|
|
get uniformGroup() {
|
|
return this._currentGlobalUniformData.bindGroup.resources[0];
|
|
}
|
|
_createUniforms() {
|
|
return new UniformGroup.UniformGroup({uProjectionMatrix:{value:new Matrix.Matrix(), type:"mat3x3\x3cf32\x3e"}, uWorldTransformMatrix:{value:new Matrix.Matrix(), type:"mat3x3\x3cf32\x3e"}, uWorldColorAlpha:{value:new Float32Array(4), type:"vec4\x3cf32\x3e"}, uResolution:{value:[0, 0], type:"vec2\x3cf32\x3e"}}, {isStatic:!0});
|
|
}
|
|
destroy() {
|
|
this._renderer = null;
|
|
this._globalUniformDataStack.length = 0;
|
|
this._uniformsPool.length = 0;
|
|
this._activeUniforms.length = 0;
|
|
this._bindGroupPool.length = 0;
|
|
this._activeBindGroups.length = 0;
|
|
this._currentGlobalUniformData = null;
|
|
}
|
|
}
|
|
GlobalUniformSystem.extension = {type:[global.ExtensionType.WebGLSystem, global.ExtensionType.WebGPUSystem, global.ExtensionType.CanvasSystem], name:"globalUniforms"};
|
|
exports.GlobalUniformSystem = GlobalUniformSystem;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$renderTarget$GlobalUniformSystem.js.map
|