sdfsdfs
This commit is contained in:
92
node_modules/pixi.js/lib/rendering/renderers/gl/GlStencilSystem.js
generated
vendored
Normal file
92
node_modules/pixi.js/lib/rendering/renderers/gl/GlStencilSystem.js
generated
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
'use strict';
|
||||
|
||||
var Extensions = require('../../../extensions/Extensions.js');
|
||||
var GpuStencilModesToPixi = require('../gpu/state/GpuStencilModesToPixi.js');
|
||||
var _const = require('../shared/state/const.js');
|
||||
|
||||
"use strict";
|
||||
class GlStencilSystem {
|
||||
constructor(renderer) {
|
||||
this._stencilCache = {
|
||||
enabled: false,
|
||||
stencilReference: 0,
|
||||
stencilMode: _const.STENCIL_MODES.NONE
|
||||
};
|
||||
this._renderTargetStencilState = /* @__PURE__ */ Object.create(null);
|
||||
renderer.renderTarget.onRenderTargetChange.add(this);
|
||||
}
|
||||
contextChange(gl) {
|
||||
this._gl = gl;
|
||||
this._comparisonFuncMapping = {
|
||||
always: gl.ALWAYS,
|
||||
never: gl.NEVER,
|
||||
equal: gl.EQUAL,
|
||||
"not-equal": gl.NOTEQUAL,
|
||||
less: gl.LESS,
|
||||
"less-equal": gl.LEQUAL,
|
||||
greater: gl.GREATER,
|
||||
"greater-equal": gl.GEQUAL
|
||||
};
|
||||
this._stencilOpsMapping = {
|
||||
keep: gl.KEEP,
|
||||
zero: gl.ZERO,
|
||||
replace: gl.REPLACE,
|
||||
invert: gl.INVERT,
|
||||
"increment-clamp": gl.INCR,
|
||||
"decrement-clamp": gl.DECR,
|
||||
"increment-wrap": gl.INCR_WRAP,
|
||||
"decrement-wrap": gl.DECR_WRAP
|
||||
};
|
||||
this._stencilCache.enabled = false;
|
||||
this._stencilCache.stencilMode = _const.STENCIL_MODES.NONE;
|
||||
this._stencilCache.stencilReference = 0;
|
||||
}
|
||||
onRenderTargetChange(renderTarget) {
|
||||
if (this._activeRenderTarget === renderTarget)
|
||||
return;
|
||||
this._activeRenderTarget = renderTarget;
|
||||
let stencilState = this._renderTargetStencilState[renderTarget.uid];
|
||||
if (!stencilState) {
|
||||
stencilState = this._renderTargetStencilState[renderTarget.uid] = {
|
||||
stencilMode: _const.STENCIL_MODES.DISABLED,
|
||||
stencilReference: 0
|
||||
};
|
||||
}
|
||||
this.setStencilMode(stencilState.stencilMode, stencilState.stencilReference);
|
||||
}
|
||||
setStencilMode(stencilMode, stencilReference) {
|
||||
const stencilState = this._renderTargetStencilState[this._activeRenderTarget.uid];
|
||||
const gl = this._gl;
|
||||
const mode = GpuStencilModesToPixi.GpuStencilModesToPixi[stencilMode];
|
||||
const _stencilCache = this._stencilCache;
|
||||
stencilState.stencilMode = stencilMode;
|
||||
stencilState.stencilReference = stencilReference;
|
||||
if (stencilMode === _const.STENCIL_MODES.DISABLED) {
|
||||
if (this._stencilCache.enabled) {
|
||||
this._stencilCache.enabled = false;
|
||||
gl.disable(gl.STENCIL_TEST);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!this._stencilCache.enabled) {
|
||||
this._stencilCache.enabled = true;
|
||||
gl.enable(gl.STENCIL_TEST);
|
||||
}
|
||||
if (stencilMode !== _stencilCache.stencilMode || _stencilCache.stencilReference !== stencilReference) {
|
||||
_stencilCache.stencilMode = stencilMode;
|
||||
_stencilCache.stencilReference = stencilReference;
|
||||
gl.stencilFunc(this._comparisonFuncMapping[mode.stencilBack.compare], stencilReference, 255);
|
||||
gl.stencilOp(gl.KEEP, gl.KEEP, this._stencilOpsMapping[mode.stencilBack.passOp]);
|
||||
}
|
||||
}
|
||||
}
|
||||
/** @ignore */
|
||||
GlStencilSystem.extension = {
|
||||
type: [
|
||||
Extensions.ExtensionType.WebGLSystem
|
||||
],
|
||||
name: "stencil"
|
||||
};
|
||||
|
||||
exports.GlStencilSystem = GlStencilSystem;
|
||||
//# sourceMappingURL=GlStencilSystem.js.map
|
Reference in New Issue
Block a user