cables_dev/cables/src/core/cg/cg_uniform.js
- import { Logger } from "cables-shared-client";
- import { Port } from "../core_port.js";
-
- class CgUniform
- {
- constructor(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName)
- {
- this._log = new Logger("cg_uniform");
- this._type = __type;
- this._name = __name;
- this._shader = __shader;
- this._value = 0.00001;
- this._oldValue = null;
- this._port = null;
- this._structName = _structName;
- this._structUniformName = _structUniformName;
- this._propertyName = _propertyName;
-
- this._shader._addUniform(this);
- this.needsUpdate = true;
- this.shaderType = null;
- this.comment = null;
-
- if (__type == "f")
- {
- this.set = this.setValue = this.setValueF.bind(this);
- this.updateValue = this.updateValueF.bind(this);
- }
- else if (__type == "f[]")
- {
- this.set = this.setValue = this.setValueArrayF.bind(this);
- this.updateValue = this.updateValueArrayF.bind(this);
- }
- else if (__type == "2f[]")
- {
- this.set = this.setValue = this.setValueArray2F.bind(this);
- this.updateValue = this.updateValueArray2F.bind(this);
- }
- else if (__type == "3f[]")
- {
- this.set = this.setValue = this.setValueArray3F.bind(this);
- this.updateValue = this.updateValueArray3F.bind(this);
- }
- else if (__type == "4f[]")
- {
- this.set = this.setValue = this.setValueArray4F.bind(this);
- this.updateValue = this.updateValueArray4F.bind(this);
- }
- else if (__type == "i")
- {
- this.set = this.setValue = this.setValueI.bind(this);
- this.updateValue = this.updateValueI.bind(this);
- }
- else if (__type == "2i")
- {
- this.set = this.setValue = this.setValue2I.bind(this);
- this.updateValue = this.updateValue2I.bind(this);
- }
- else if (__type == "3i")
- {
- this.set = this.setValue = this.setValue3I.bind(this);
- this.updateValue = this.updateValue3I.bind(this);
- }
- else if (__type == "4i")
- {
- this.set = this.setValue = this.setValue4I.bind(this);
- this.updateValue = this.updateValue4I.bind(this);
- }
- else if (__type == "b")
- {
- this.set = this.setValue = this.setValueBool.bind(this);
- this.updateValue = this.updateValueBool.bind(this);
- }
- else if (__type == "4f")
- {
- this.set = this.setValue = this.setValue4F.bind(this);
- this.updateValue = this.updateValue4F.bind(this);
- }
- else if (__type == "3f")
- {
- this.set = this.setValue = this.setValue3F.bind(this);
- this.updateValue = this.updateValue3F.bind(this);
- }
- else if (__type == "2f")
- {
- this.set = this.setValue = this.setValue2F.bind(this);
- this.updateValue = this.updateValue2F.bind(this);
- }
- else if (__type == "t")
- {
- this.set = this.setValue = this.setValueT.bind(this);
- this.updateValue = this.updateValueT.bind(this);
- }
- else if (__type == "sampler")
- {
- if (this.setValueAny)
- {
- this.set = this.setValue = this.setValueAny.bind(this);
- this.updateValue = this.updateValueAny.bind(this);
- }
- }
- else if (__type == "tc")
- {
- this.set = this.setValue = this.setValueT.bind(this);
- this.updateValue = this.updateValueT.bind(this);
- }
- else if (__type == "t[]")
- {
- this.set = this.setValue = this.setValueArrayT.bind(this);
- this.updateValue = this.updateValueArrayT.bind(this);
- }
- else if (__type == "m4" || __type == "m4[]")
- {
- this.set = this.setValue = this.setValueM4.bind(this);
- this.updateValue = this.updateValueM4.bind(this);
- }
- else
- {
- // console.error("unknown");
- this._log.error("Unknown uniform type " + __type);
- }
-
- if (typeof _value == "object" && _value instanceof Port)
- {
- this._port = _value;
- this._value = this._port.get();
-
-
- if (_port2 && _port3 && _port4)
- {
- if (!(_port2 instanceof Port) || !(_port3 instanceof Port) || !(_port4 instanceof Port))
- {
- this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name);
- }
-
- this._value = [0, 0, 0, 0];
- this._port2 = _port2;
- this._port3 = _port3;
- this._port4 = _port4;
-
- this._port.on("change", this.updateFromPort4f.bind(this));
- this._port2.on("change", this.updateFromPort4f.bind(this));
- this._port3.on("change", this.updateFromPort4f.bind(this));
- this._port4.on("change", this.updateFromPort4f.bind(this));
-
- // this._port.onChange = this._port2.onChange = this._port3.onChange = this._port4.onChange = this.updateFromPort4f.bind(this);
- this.updateFromPort4f();
- }
- else if (_port2 && _port3)
- {
- if (!(_port2 instanceof Port) || !(_port3 instanceof Port))
- {
- this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name);
- }
-
- this._value = [0, 0, 0];
- this._port2 = _port2;
- this._port3 = _port3;
- // this._port.onChange = this._port2.onChange = this._port3.onChange = this.updateFromPort3f.bind(this);
- this._port.on("change", this.updateFromPort3f.bind(this));
- this._port2.on("change", this.updateFromPort3f.bind(this));
- this._port3.on("change", this.updateFromPort3f.bind(this));
-
- this.updateFromPort3f();
- }
- else if (_port2)
- {
- if (!(_port2 instanceof Port))
- {
- this._log.error("[cgl_uniform] mixed port/value parameter for vec4 ", this._name);
- }
-
- this._value = [0, 0];
- this._port2 = _port2;
- // this._port.onChange = this._port2.onChange = this.updateFromPort2f.bind(this);
- this._port.on("change", this.updateFromPort2f.bind(this));
- this._port2.on("change", this.updateFromPort2f.bind(this));
-
- this.updateFromPort2f();
- }
- else
- {
- // this._port.on = this.updateFromPort.bind(this);
- this._port.on("change", this.updateFromPort.bind(this));
- }
- }
- else this._value = _value;
-
-
- if (this._value == undefined)
- {
- console.log("value undefined", this);
- this._value = 0;
- }
-
- this.setValue(this._value);
-
- this.needsUpdate = true;
- }
-
- getType()
- {
- return this._type;
- }
-
- get type()
- {
- return this._type;
- }
-
- get name()
- {
- return this._name;
- }
-
- getName()
- {
- return this._name;
- }
-
- getValue()
- {
- return this._value;
- }
-
- getShaderType()
- {
- return this.shaderType;
- }
-
- isStructMember()
- {
- return !!this._structName;
- }
-
-
- updateFromPort4f()
- {
- this._value[0] = this._port.get();
- this._value[1] = this._port2.get();
- this._value[2] = this._port3.get();
- this._value[3] = this._port4.get();
- this.setValue(this._value);
- }
-
- updateFromPort3f()
- {
- this._value[0] = this._port.get();
- this._value[1] = this._port2.get();
- this._value[2] = this._port3.get();
- this.setValue(this._value);
- }
-
- updateFromPort2f()
- {
- this._value[0] = this._port.get();
- this._value[1] = this._port2.get();
- this.setValue(this._value);
- }
-
- updateFromPort()
- {
- this.setValue(this._port.get());
- }
- }
-
- export default CgUniform;