UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

58 lines (57 loc) 2.05 kB
"use strict"; import { WebGLRenderer } from "three"; import { TypedNode } from "../../engine/nodes/_Base"; import { CameraSopNodeType, NetworkNodeType, NodeContext } from "../../engine/poly/NodeContext"; import { isNumber } from "../Type"; import { CameraAttribute } from "./CoreCamera"; import { coreObjectClassFactory } from "../geometry/CoreObjectFactory"; export class CoreCameraPostProcessController { static isPostProcessNetworkNode(node) { return node.type() == NetworkNodeType.POST || node.context() == NodeContext.SOP && node.type() == CameraSopNodeType.POST_PROCESS; } static createComposer(options) { const { renderer, scene, renderScene, camera, viewer } = options; let postProcessNode; const postProcessNodeId = coreObjectClassFactory(camera).attribValue( camera, CameraAttribute.POST_PROCESS_NODE_ID ); if (postProcessNodeId && isNumber(postProcessNodeId)) { const foundNode = scene.graph.nodeFromId(postProcessNodeId); if (foundNode && foundNode instanceof TypedNode && this.isPostProcessNetworkNode(foundNode)) { postProcessNode = foundNode; } } if (!postProcessNode) { return; } if (!(renderer instanceof WebGLRenderer)) { return; } return postProcessNode.effectsComposerController.createEffectsComposerAndBuildPasses({ renderer, scene: renderScene, camera, viewer // resolution, // requester: this.node, // render_target: render_target, // prepend_render_pass: this.node.pv.prepend_render_pass, }); } // private _clear_render_passes(composer: EffectComposer) { // let render_pass: Pass | undefined; // while ((render_pass = composer.passes.pop())) { // if (render_pass) { // const disposable_pass: DisposablePass = render_pass as DisposablePass; // if (typeof disposable_pass.dispose === 'function') { // try { // disposable_pass.dispose(); // } catch (e) { // console.warn(e); // } // } // } // } // } }