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;
this.setValue(this._value);
this.needsUpdate = true;
}
getType()
{
return this._type;
}
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;