+ {
+ uniforms[name] = uni;
+ changes = KEYS_CHANGED;
+ }
+}
+
+void ProgramData::uniform(const string &name, int v)
+{
+ uniform(name, new Uniform1i(v));
+}
+
+void ProgramData::uniform(const string &name, float v)
+{
+ uniform(name, new Uniform1f(v));
+}
+
+void ProgramData::uniform(const string &name, float v0, float v1)
+{
+ float va[2] = { v0, v1 };
+ uniform2(name, va);
+}
+
+void ProgramData::uniform2(const string &name, const float *v)
+{
+ uniform(name, new Uniform2f(v));
+}
+
+void ProgramData::uniform(const string &name, float v0, float v1, float v2)
+{
+ float va[3] = { v0, v1, v2 };
+ uniform3(name, va);
+}
+
+void ProgramData::uniform(const string &name, const Vector3 &v)
+{
+ uniform(name, v.x, v.y, v.z);
+}
+
+void ProgramData::uniform3(const string &name, const float *v)
+{
+ uniform(name, new Uniform3f(v));
+}
+
+void ProgramData::uniform(const string &name, float v0, float v1, float v2, float v3)
+{
+ float va[4] = { v0, v1, v2, v3 };
+ uniform4(name, va);
+}
+
+void ProgramData::uniform(const string &name, const Vector4 &v)
+{
+ uniform(name, v.x, v.y, v.z, v.w);
+}
+
+void ProgramData::uniform(const string &name, const Color &c)
+{
+ uniform(name, c.r, c.g, c.b, c.a);
+}
+
+void ProgramData::uniform4(const string &name, const float *v)
+{
+ uniform(name, new Uniform4f(v));
+}
+
+void ProgramData::uniform_matrix2(const string &name, const float *v)
+{
+ uniform(name, new UniformMatrix2x2f(v));
+}
+
+void ProgramData::uniform_matrix3(const string &name, const float *v)
+{
+ uniform(name, new UniformMatrix3x3f(v));
+}
+
+void ProgramData::uniform(const string &name, const Matrix &m)
+{
+ float v[16];
+ copy(m.data(), m.data()+16, v);
+ uniform_matrix4(name, v);