71 lines
2.4 KiB
JavaScript
71 lines
2.4 KiB
JavaScript
"use strict";
|
|
var __defProp = Object.defineProperty;
|
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
var __publicField = (obj, key, value) => {
|
|
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
return value;
|
|
};
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
const Pass = require("./Pass.cjs");
|
|
class MaskPass extends Pass.Pass {
|
|
constructor(scene, camera) {
|
|
super();
|
|
__publicField(this, "scene");
|
|
__publicField(this, "camera");
|
|
__publicField(this, "inverse");
|
|
this.scene = scene;
|
|
this.camera = camera;
|
|
this.clear = true;
|
|
this.needsSwap = false;
|
|
this.inverse = false;
|
|
}
|
|
render(renderer, writeBuffer, readBuffer) {
|
|
const context = renderer.getContext();
|
|
const state = renderer.state;
|
|
state.buffers.color.setMask(false);
|
|
state.buffers.depth.setMask(false);
|
|
state.buffers.color.setLocked(true);
|
|
state.buffers.depth.setLocked(true);
|
|
let writeValue, clearValue;
|
|
if (this.inverse) {
|
|
writeValue = 0;
|
|
clearValue = 1;
|
|
} else {
|
|
writeValue = 1;
|
|
clearValue = 0;
|
|
}
|
|
state.buffers.stencil.setTest(true);
|
|
state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE);
|
|
state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295);
|
|
state.buffers.stencil.setClear(clearValue);
|
|
state.buffers.stencil.setLocked(true);
|
|
renderer.setRenderTarget(readBuffer);
|
|
if (this.clear)
|
|
renderer.clear();
|
|
renderer.render(this.scene, this.camera);
|
|
renderer.setRenderTarget(writeBuffer);
|
|
if (this.clear)
|
|
renderer.clear();
|
|
renderer.render(this.scene, this.camera);
|
|
state.buffers.color.setLocked(false);
|
|
state.buffers.depth.setLocked(false);
|
|
state.buffers.stencil.setLocked(false);
|
|
state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295);
|
|
state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP);
|
|
state.buffers.stencil.setLocked(true);
|
|
}
|
|
}
|
|
class ClearMaskPass extends Pass.Pass {
|
|
constructor() {
|
|
super();
|
|
this.needsSwap = false;
|
|
}
|
|
render(renderer) {
|
|
renderer.state.buffers.stencil.setLocked(false);
|
|
renderer.state.buffers.stencil.setTest(false);
|
|
}
|
|
}
|
|
exports.ClearMaskPass = ClearMaskPass;
|
|
exports.MaskPass = MaskPass;
|
|
//# sourceMappingURL=MaskPass.cjs.map
|