]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programdata.cpp
Implement uniform arrays
[libs/gl.git] / source / programdata.cpp
index 535e9e792f3b40826ab60d26bb1f72f2eca4e821..0a2ec6050fa189256d11e349b2b4665ac0f980e7 100644 (file)
@@ -62,17 +62,19 @@ void ProgramData::uniform(const string &name, float v)
 
 void ProgramData::uniform(const string &name, float v0, float v1)
 {
-       uniform(name, new Uniform2f(v0, v1));
+       float va[2] = { v0, v1 };
+       uniform2(name, va);
 }
 
 void ProgramData::uniform2(const string &name, const float *v)
 {
-       uniform(name, v[0], v[1]);
+       uniform(name, new Uniform2f(v));
 }
 
 void ProgramData::uniform(const string &name, float v0, float v1, float v2)
 {
-       uniform(name, new Uniform3f(v0, v1, v2));
+       float va[3] = { v0, v1, v2 };
+       uniform3(name, va);
 }
 
 void ProgramData::uniform(const string &name, const Vector3 &v)
@@ -82,12 +84,13 @@ void ProgramData::uniform(const string &name, const Vector3 &v)
 
 void ProgramData::uniform3(const string &name, const float *v)
 {
-       uniform(name, v[0], v[1], v[2]);
+       uniform(name, new Uniform3f(v));
 }
 
 void ProgramData::uniform(const string &name, float v0, float v1, float v2, float v3)
 {
-       uniform(name, new Uniform4f(v0, v1, v2, v3));
+       float va[4] = { v0, v1, v2, v3 };
+       uniform4(name, va);
 }
 
 void ProgramData::uniform(const string &name, const Vector4 &v)
@@ -102,7 +105,7 @@ void ProgramData::uniform(const string &name, const Color &c)
 
 void ProgramData::uniform4(const string &name, const float *v)
 {
-       uniform(name, v[0], v[1], v[2], v[3]);
+       uniform(name, new Uniform4f(v));
 }
 
 void ProgramData::uniform_matrix4(const string &name, const float *v)
@@ -117,6 +120,31 @@ void ProgramData::uniform_matrix4(const string &name, const Matrix &m)
        uniform_matrix4(name, v);
 }
 
+void ProgramData::uniform1_array(const string &name, unsigned n, const float *v)
+{
+       uniform(name, new UniformArray<Uniform1f>(n, v));
+}
+
+void ProgramData::uniform2_array(const string &name, unsigned n, const float *v)
+{
+       uniform(name, new UniformArray<Uniform2f>(n, v));
+}
+
+void ProgramData::uniform3_array(const string &name, unsigned n, const float *v)
+{
+       uniform(name, new UniformArray<Uniform3f>(n, v));
+}
+
+void ProgramData::uniform4_array(const string &name, unsigned n, const float *v)
+{
+       uniform(name, new UniformArray<Uniform4f>(n, v));
+}
+
+void ProgramData::uniform_matrix4_array(const string &name, unsigned n, const float *v)
+{
+       uniform(name, new UniformArray<UniformMatrix4x4f>(n, v));
+}
+
 const UniformBlock &ProgramData::get_block(const Program &prog) const
 {
        if(modified)