three-stdlib
Version:
stand-alone library of threejs examples
71 lines (70 loc) • 2.43 kB
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