UNPKG

three-stdlib

Version:

stand-alone library of threejs examples

71 lines (70 loc) 2.43 kB
"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