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 (!_value)
- {
- // if (this.getType() == "m4") this._value = mat4.create();
- if (this.getType() == "t") this._value = this._cgp.getEmptyTexture();
- // else if (this.getType() == "2f") this._value = [0, 0];
- // else if (this.getType() == "4f") this._value = [0, 1, 0, 1];
- // else if (this.getType() == "3f") this._value = [0, 1, 0];
- }
-
- 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)
- {
- if (v[0] == undefined)
- {
- this._log.stack("uniform value undefined");
- console.error("uniform value undefined");
- }
- 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);
- }
- }
-
- getWgslTypeStr()
- {
- if (this._type == "m4") return "mat4x4f";
- if (this._type == "4f") return "vec4f";
- if (this._type == "3f") return "vec3f";
- if (this._type == "2f") return "vec2f";
- if (this._type == "f") return "float";
- if (this._type == "f[]") return "array<vec4f>";
- if (this._type == "i") return "int";
- if (this._type == "sampler") return "sampler";
- if (this._type == "t") return "texture_2d<f32>";
- this._log.warn("unknown type getWgslTypeStr", this._type);
- return "???";
- }
-
- 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;
- }
-
- copy(newShader)
- {
- const uni = new Uniform(newShader, this._type, this._name, this._value, this._port2, this._port3, this._port4, this._structUniformName, this._structName, this._propertyName);
- uni.shaderType = this.shaderType;
-
- console.log(this._name, this._value, uni._value);
-
-
- return uni;
- }
- }