]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programdata.h
Support loading uniform arrays from data files
[libs/gl.git] / source / programdata.h
index 6e4b53fe10374bf73f462acbfb08fef19bf455e3..07e1bb64f72f967e0cc94ede7e2b13323a1e026f 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <map>
 #include <msp/datafile/objectloader.h>
+#include "datatype.h"
 #include "matrix.h"
 #include "program.h"
 #include "vector.h"
@@ -37,9 +38,40 @@ public:
                void uniform2f(const std::string &, float, float);
                void uniform3f(const std::string &, float, float, float);
                void uniform4f(const std::string &, float, float, float, float);
+               void uniform_array_(const std::string &, DataType, unsigned);
+               void uniform1i_array(const std::string &);
+               void uniform1f_array(const std::string &);
+               void uniform2f_array(const std::string &);
+               void uniform3f_array(const std::string &);
+               void uniform4f_array(const std::string &);
+               void uniform_array(const std::string &);
        };
 
 private:
+       class ArrayLoader: public DataFile::Loader
+       {
+       private:
+               DataType type;
+               unsigned element_size;
+               std::vector<char> data;
+
+       public:
+               ArrayLoader(DataType, unsigned);
+
+               DataType get_data_type() const { return type; }
+               unsigned get_element_size() const { return element_size; }
+               const void *get_data() const { return &data[0]; }
+               unsigned get_size() const { return data.size()/(4*element_size); }
+
+       private:
+               void uniform(DataType, unsigned, const void *);
+               void uniform1i(int);
+               void uniform1f(float);
+               void uniform2f(float, float);
+               void uniform3f(float, float, float);
+               void uniform4f(float, float, float, float);
+       };
+
        typedef unsigned Mask;
 
        enum