Files
nothoughts/node_modules/pixi.js/lib/rendering/renderers/gpu/GpuStencilSystem.js
2025-08-04 18:57:35 +02:00

49 lines
1.6 KiB
JavaScript

'use strict';
var Extensions = require('../../../extensions/Extensions.js');
var _const = require('../shared/state/const.js');
"use strict";
class GpuStencilSystem {
constructor(renderer) {
this._renderTargetStencilState = /* @__PURE__ */ Object.create(null);
this._renderer = renderer;
renderer.renderTarget.onRenderTargetChange.add(this);
}
onRenderTargetChange(renderTarget) {
let stencilState = this._renderTargetStencilState[renderTarget.uid];
if (!stencilState) {
stencilState = this._renderTargetStencilState[renderTarget.uid] = {
stencilMode: _const.STENCIL_MODES.DISABLED,
stencilReference: 0
};
}
this._activeRenderTarget = renderTarget;
this.setStencilMode(stencilState.stencilMode, stencilState.stencilReference);
}
setStencilMode(stencilMode, stencilReference) {
const stencilState = this._renderTargetStencilState[this._activeRenderTarget.uid];
stencilState.stencilMode = stencilMode;
stencilState.stencilReference = stencilReference;
const renderer = this._renderer;
renderer.pipeline.setStencilMode(stencilMode);
renderer.encoder.renderPassEncoder.setStencilReference(stencilReference);
}
destroy() {
this._renderer.renderTarget.onRenderTargetChange.remove(this);
this._renderer = null;
this._activeRenderTarget = null;
this._renderTargetStencilState = null;
}
}
/** @ignore */
GpuStencilSystem.extension = {
type: [
Extensions.ExtensionType.WebGPUSystem
],
name: "stencil"
};
exports.GpuStencilSystem = GpuStencilSystem;
//# sourceMappingURL=GpuStencilSystem.js.map