UNPKG

polygonjs-engine

Version:

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

96 lines (95 loc) 3.04 kB
import {Vector4 as Vector42} from "three/src/math/Vector4"; import {Vector3 as Vector32} from "three/src/math/Vector3"; import {Vector2 as Vector22} from "three/src/math/Vector2"; import {Color as Color2} from "three/src/math/Color"; import {ParamType as ParamType2} from "../../../../poly/ParamType"; import {TypeAssert} from "../../../../poly/Assert"; import {ParamConfig as ParamConfig2} from "../../../utils/code/configs/ParamConfig"; export class GlParamConfig extends ParamConfig2 { constructor(_type, _name, _default_value, _uniform_name) { super(_type, _name, _default_value); this._uniform_name = _uniform_name; } get uniform_name() { return this._uniform_name; } get uniform() { return this._uniform = this._uniform || this._create_uniform(); } _create_uniform() { return GlParamConfig.uniform_by_type(this._type); } execute_callback(node, param) { this._callback(node, param); } _callback(node, param) { GlParamConfig.callback(param, this.uniform); } static callback(param, uniform) { switch (param.type()) { case ParamType2.RAMP: uniform.value = param.ramp_texture(); return; case ParamType2.OPERATOR_PATH: GlParamConfig.set_uniform_value_from_texture(param, uniform); return; default: uniform.value = param.value; } } static uniform_by_type(type) { switch (type) { case ParamType2.BOOLEAN: return {value: 0}; case ParamType2.BUTTON: return {value: 0}; case ParamType2.COLOR: return {value: new Color2(0, 0, 0)}; case ParamType2.FLOAT: return {value: 0}; case ParamType2.FOLDER: return {value: 0}; case ParamType2.INTEGER: return {value: 0}; case ParamType2.OPERATOR_PATH: return {value: 0}; case ParamType2.NODE_PATH: return {value: 0}; case ParamType2.PARAM_PATH: return {value: 0}; case ParamType2.RAMP: return {value: null}; case ParamType2.SEPARATOR: return {value: 0}; case ParamType2.STRING: return {value: null}; case ParamType2.VECTOR2: return {value: new Vector22(0, 0)}; case ParamType2.VECTOR3: return {value: new Vector32(0, 0, 0)}; case ParamType2.VECTOR4: return {value: new Vector42(0, 0, 0, 0)}; } TypeAssert.unreachable(type); } static set_uniform_value_from_texture(param, uniform) { const found_node = param.found_node(); if (found_node) { if (found_node.isDirty()) { found_node.requestContainer().then((container) => { const texture = container.texture(); uniform.value = texture; }); } else { const container = found_node.container_controller.container; const texture = container.texture(); uniform.value = texture; } } else { uniform.value = null; } } set_uniform_value_from_ramp(param, uniform) { uniform.value = param.ramp_texture(); } }