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.

81 lines (67 loc) 2.7 kB
import {IDisposable, ValOrFunc} from 'ts-browser-helpers' import {IUniform} from 'three' import {Pass} from 'three/examples/jsm/postprocessing/Pass.js' import {MaterialExtension} from '../materials' import {ICamera, IRenderManager, IScene} from '../core' export type IPassID = 'render' | 'screen' | string export interface IPass<Tid extends IPassID = IPassID> extends Pass, IDisposable { uniforms?: {[name: string]: IUniform} // todo? // updateShaderProperties?: (updater?: (IShaderPropertiesUpdater|undefined) | (IShaderPropertiesUpdater|undefined)[])=>void materialExtension?: MaterialExtension /** * Checked by {@link RenderManager} to determine whether to render this frame. A frame is rendered if any pass is dirty. * This can be set by the plugin/pass to indicate when to continue rendering. See {@link ProgressivePlugin}. * This is different from {@link setDirty} which is implementation specific to the pass/plugin. It generally calls onDirty and set the viewer dirty. */ dirty?: ValOrFunc<boolean> // isDirty (optional) /** * Set the pass as dirty. This is implementation specific to the pass/plugin. It generally calls all {@link onDirty} and set the viewer dirty. */ setDirty?(): void onDirty?: (()=>void)[]; /** * Unique id for the pass. Used to determine the order of passes in the pipeline. */ passId?: Tid; } export interface IPipelinePass<Tid extends IPassID = IPassID> extends IPass<Tid> { /** * Unique id for the pass. Used to determine the order of passes in the pipeline. */ readonly passId: Tid /** * Passes that should run before this pass */ after?: IPassID[] /** * Passes that should run after this pass */ before?: IPassID[] /** * Passes that are required to be present in the pipeline to run this pass. */ required?: IPassID[] /** * This function gets called at the beginning of every frame where this pass would be enabled. * @param scene * @param camera * @param renderManager */ beforeRender?(scene: IScene, camera: ICamera, renderManager: IRenderManager): void; /** * Callback when the pass is registered with the render manager * @param renderer */ onRegister?(renderer: IRenderManager): void; /** * Callback when the pass is unregistered with the render manager * @param renderer */ onUnregister?(renderer: IRenderManager): void; /** * This function gets called at the end of every frame where this pass would be enabled. * @param renderManager */ onPostFrame?(renderManager: IRenderManager): void; }