UNPKG

threepipe

Version:

A modern 3D viewer framework built on top of three.js, written in TypeScript, designed to make creating high-quality, modular, and extensible 3D experiences on the web simple and enjoyable.

76 lines 2.77 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; import { AViewerPluginSync } from '../../viewer'; import { onChange, serialize } from 'ts-browser-helpers'; import { wrapThisFunction2 } from '../../utils'; import { uiToggle } from 'uiconfig.js'; /** * Pipeline Pass Plugin * * Base class for creating a plugin that registers a custom pass to the main render pipeline * * @category Plugins */ export class PipelinePassPlugin extends AViewerPluginSync { /** * This function is called every frame before composer render, if this pass is being used in the pipeline * @param _ * @param _1 * @param _2 */ _beforeRender(_, _1, _2) { if (!this._pass) return false; this._pass.enabled = !this.isDisabled(); return this._pass.enabled; } constructor() { super(); this.enabled = true; this._beforeRender = this._beforeRender.bind(this); } onAdded(viewer) { super.onAdded(viewer); this._pass = this._createPass(); this._pass.onDirty?.push(viewer.setDirty); this._pass.beforeRender = wrapThisFunction2(this._beforeRender, this._pass.beforeRender); viewer.renderManager.registerPass(this._pass); } onRemove(viewer) { if (this._pass) { viewer.renderManager.unregisterPass(this._pass); if (this._pass.dispose) this._pass.dispose(); } this._pass = undefined; super.onRemove(viewer); } get pass() { return this._pass; } toJSON(meta) { return super.toJSON(meta); } fromJSON(data, meta) { return super.fromJSON(data, meta); } setDirty() { if (this._pass) this._pass.enabled = !this.isDisabled(); this._viewer?.setDirty(); this.uiConfig?.uiRefresh?.(true, 'postFrame', 100); // adding delay for a few frames, so render target(if any can update) } } __decorate([ serialize(), uiToggle('Enabled'), onChange(PipelinePassPlugin.prototype.setDirty) ], PipelinePassPlugin.prototype, "enabled", void 0); __decorate([ serialize('pass') ], PipelinePassPlugin.prototype, "_pass", void 0); //# sourceMappingURL=PipelinePassPlugin.js.map