@polygonjs/polygonjs
Version:
node-based WebGL 3D engine https://polygonjs.com
58 lines (57 loc) • 2.05 kB
JavaScript
;
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);
// }
// }
// }
// }
// }
}