cables_dev/cables/src/core/cgp/cgp_uniform.js
import CgTexture from "../cg/cg_texture.js";
import CgUniform from "../cg/cg_uniform.js";
export default class Uniform extends CgUniform
{
constructor(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName)
{
super(__shader, __type, __name, _value, _port2, _port3, _port4, _structUniformName, _structName, _propertyName);
this._cgp = __shader._cgp;
if (this.getType() == "t" && !_value) this._value = this._cgp.getEmptyTexture();
this.gpuBuffer = null;
}
updateValueF() { }
updateValueArrayF() {}
setValueArrayF(v)
{
this.needsUpdate = true;
this._value = v;
}
setValueF(v)
{
this.needsUpdate = true;
this._value = v;
}
updateValue2F() { }
setValue2F(v)
{
this.needsUpdate = true;
this._value = v;
}
updateValue3F() { }
setValue3F(v)
{
this.needsUpdate = true;
this._value = v;
}
updateValue4F() { }
setValue4F(v)
{
this.needsUpdate = true;
this._value = v;
}
setValueT(v)
{
if (this._value != v)
this._shader.needsPipelineUpdate = "texture changed"; // todo really needed ? change binding instead?
this.needsUpdate = true;
this._value = v;
}
updateValueM4(v) {}
setValueM4(v)
{
this.needsUpdate = true;
this._value = v;
}
setValueAny(v)
{
this.needsUpdate = true;
this._value = v;
}
updateValueAny() {}
updateValueT() {}
setGpuBuffer(b)
{
this.gpuBuffer = b;
}
copyToBuffer(buff, pos = 0)
{
if (this._type == "f")
{
buff[pos] = this._value;
}
else if (this._type == "t")
{
}
else if (this._type == "4f")
{
buff[pos] = this._value[0];
buff[pos + 1] = this._value[1];
buff[pos + 2] = this._value[2];
buff[pos + 3] = this._value[3];
}
else if (this._type == "f[]")
{
for (let i = 0; i < this._value.length; i++)
buff[pos + i] = this._value[i];
}
else if (this._type == "m4")
{
for (let i = 0; i < 16; i++)
buff[pos + i] = this._value[i];
}
else
{
this._log.warn("uniform copy to buffer unknown", this._type);
}
}
getSizeBytes()
{
const bytesPerFloat = 4;
const bytesPerInt = 4;
if (this._type == "t") return 4;
if (this._type == "sampler") return 4;
if (this._type == "f") return 1 * bytesPerFloat;
if (this._type == "2f") return 2 * bytesPerFloat;
if (this._type == "3f") return 3 * bytesPerFloat;
if (this._type == "4f") return 4 * bytesPerFloat;
if (this._type == "f[]") return this._value.length * bytesPerFloat;
if (this._type == "m4") return 4 * 4 * bytesPerFloat;
if (this._type == "i") return 1 * bytesPerInt;
if (this._type == "2i") return 2 * bytesPerInt;
this._log.warn("unknown type getSizeBytes", this._type);
return 4;
}
}