59 lines
4.2 KiB
JavaScript
59 lines
4.2 KiB
JavaScript
shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$mask$stencil$StencilMaskPipe = function(global, require, module, exports) {
|
|
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
|
|
var _const$1 = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$gl$const"), _const = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$state$const");
|
|
"use strict";
|
|
class StencilMaskPipe {
|
|
constructor(renderer) {
|
|
this._maskStackHash = {};
|
|
this._maskHash = new WeakMap();
|
|
this._renderer = renderer;
|
|
}
|
|
push(mask, _container, instructionSet) {
|
|
var _a;
|
|
const renderer = this._renderer;
|
|
renderer.renderPipes.batch.break(instructionSet);
|
|
renderer.renderPipes.blendMode.setBlendMode(mask.mask, "none", instructionSet);
|
|
instructionSet.add({renderPipeId:"stencilMask", action:"pushMaskBegin", mask, inverse:_container._maskOptions.inverse, canBundle:!1});
|
|
const maskContainer = mask.mask;
|
|
maskContainer.includeInBuild = !0;
|
|
this._maskHash.has(mask) || this._maskHash.set(mask, {instructionsStart:0, instructionsLength:0});
|
|
const maskData = this._maskHash.get(mask);
|
|
maskData.instructionsStart = instructionSet.instructionSize;
|
|
maskContainer.collectRenderables(instructionSet, renderer, null);
|
|
maskContainer.includeInBuild = !1;
|
|
renderer.renderPipes.batch.break(instructionSet);
|
|
instructionSet.add({renderPipeId:"stencilMask", action:"pushMaskEnd", mask, inverse:_container._maskOptions.inverse, canBundle:!1});
|
|
maskData.instructionsLength = instructionSet.instructionSize - maskData.instructionsStart - 1;
|
|
mask = renderer.renderTarget.renderTarget.uid;
|
|
(_a = this._maskStackHash)[mask] ?? (_a[mask] = 0);
|
|
}
|
|
pop(mask, _container, instructionSet) {
|
|
const renderer = this._renderer;
|
|
renderer.renderPipes.batch.break(instructionSet);
|
|
renderer.renderPipes.blendMode.setBlendMode(mask.mask, "none", instructionSet);
|
|
instructionSet.add({renderPipeId:"stencilMask", action:"popMaskBegin", inverse:_container._maskOptions.inverse, canBundle:!1});
|
|
mask = this._maskHash.get(mask);
|
|
for (_container = 0; _container < mask.instructionsLength; _container++) {
|
|
instructionSet.instructions[instructionSet.instructionSize++] = instructionSet.instructions[mask.instructionsStart++];
|
|
}
|
|
instructionSet.add({renderPipeId:"stencilMask", action:"popMaskEnd", canBundle:!1});
|
|
}
|
|
execute(instruction) {
|
|
var _a;
|
|
const renderer = this._renderer, renderTargetUid = renderer.renderTarget.renderTarget.uid;
|
|
let maskStackIndex = (_a = this._maskStackHash)[renderTargetUid] ?? (_a[renderTargetUid] = 0);
|
|
"pushMaskBegin" === instruction.action ? (renderer.renderTarget.ensureDepthStencil(), renderer.stencil.setStencilMode(_const.STENCIL_MODES.RENDERING_MASK_ADD, maskStackIndex), maskStackIndex++, renderer.colorMask.setMask(0)) : "pushMaskEnd" === instruction.action ? (instruction.inverse ? renderer.stencil.setStencilMode(_const.STENCIL_MODES.INVERSE_MASK_ACTIVE, maskStackIndex) : renderer.stencil.setStencilMode(_const.STENCIL_MODES.MASK_ACTIVE, maskStackIndex), renderer.colorMask.setMask(15)) :
|
|
"popMaskBegin" === instruction.action ? (renderer.colorMask.setMask(0), 0 !== maskStackIndex ? renderer.stencil.setStencilMode(_const.STENCIL_MODES.RENDERING_MASK_REMOVE, maskStackIndex) : (renderer.renderTarget.clear(null, _const$1.CLEAR.STENCIL), renderer.stencil.setStencilMode(_const.STENCIL_MODES.DISABLED, maskStackIndex)), maskStackIndex--) : "popMaskEnd" === instruction.action && (instruction.inverse ? renderer.stencil.setStencilMode(_const.STENCIL_MODES.INVERSE_MASK_ACTIVE, maskStackIndex) :
|
|
renderer.stencil.setStencilMode(_const.STENCIL_MODES.MASK_ACTIVE, maskStackIndex), renderer.colorMask.setMask(15));
|
|
this._maskStackHash[renderTargetUid] = maskStackIndex;
|
|
}
|
|
destroy() {
|
|
this._maskHash = this._maskStackHash = this._renderer = null;
|
|
}
|
|
}
|
|
StencilMaskPipe.extension = {type:[global.ExtensionType.WebGLPipes, global.ExtensionType.WebGPUPipes], name:"stencilMask"};
|
|
exports.StencilMaskPipe = StencilMaskPipe;
|
|
};
|
|
|
|
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$mask$stencil$StencilMaskPipe.js.map
|