UNPKG

polygonjs-engine

Version:

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

71 lines (60 loc) 2.06 kB
import {WebGLRenderer} from 'three/src/renderers/WebGLRenderer'; import {LinearToneMapping} from 'three/src/constants'; import {TypedCopNode} from '../_Base'; import {NodeParamsConfig, ParamConfig} from '../../utils/params/ParamsConfig'; import {Poly} from '../../../Poly'; class BaseCopRendererCopParamsConfig extends NodeParamsConfig { useCameraRenderer = ParamConfig.BOOLEAN(0); } const ParamsConfig = new BaseCopRendererCopParamsConfig(); export class BaseCopRendererCopNode extends TypedCopNode<BaseCopRendererCopParamsConfig> { params_config = ParamsConfig; } export class CopRendererController { private _renderer: WebGLRenderer | undefined; constructor(private node: BaseCopRendererCopNode) {} async renderer() { if (this.node.pv.useCameraRenderer) { return await this.camera_renderer(); } else { return (this._renderer = this._renderer || this._create_renderer()); } } reset() { this._renderer?.dispose(); this._renderer = undefined; } async camera_renderer() { let renderer = Poly.renderersController.firstRenderer(); if (renderer) { return renderer; } else { return await Poly.renderersController.waitForRenderer(); } } save_state() { // const prev_target = renderer.getRenderTarget(); // renderer.getSize(this._prev_renderer_size); // console.log('texture', texture); // const prev_pixel_aspect_ratio = renderer.getPixelRatio(); // const prev_auto_clear: boolean = renderer.autoClear; // renderer.toneMappingExposure = 1; // renderer.outputEncoding = sRGBEncoding; // should be linear this.make_linear(); } make_linear() { // renderer.outputEncoding = LinearEncoding } restore_state() { // renderer.setRenderTarget(prev_target); // renderer.setSize(this._prev_renderer_size.x, this._prev_renderer_size.y); // renderer.setPixelRatio(prev_pixel_aspect_ratio); // renderer.autoClear = prev_auto_clear; } private _create_renderer() { const renderer = new WebGLRenderer(); renderer.toneMapping = LinearToneMapping; renderer.setPixelRatio(1); return renderer; } }