1 #ifndef MSP_GL_PROGRAMDATA_H_
2 #define MSP_GL_PROGRAMDATA_H_
5 #include <msp/datafile/objectloader.h>
20 Stores uniform variables for a shader program.
25 class Loader: public DataFile::ObjectLoader<ProgramData>
28 Loader(ProgramData &);
30 void uniform1i(const std::string &, int);
31 void uniform1f(const std::string &, float);
32 void uniform2f(const std::string &, float, float);
33 void uniform3f(const std::string &, float, float, float);
34 void uniform4f(const std::string &, float, float, float, float);
46 typedef std::map<std::string, Uniform *> UniformMap;
47 typedef std::map<unsigned, Block> BlockMap;
49 // XXX All these mutables are a bit silly, but I'm out of better ideas
51 mutable BlockMap blocks;
52 mutable UniformBlock *last_block;
53 mutable Buffer *buffer;
54 mutable bool modified;
56 ProgramData &operator=(const ProgramData &);
59 ProgramData(const ProgramData &);
63 void uniform(const std::string &, Uniform *);
65 void uniform(const std::string &, int);
66 void uniform(const std::string &, float);
67 void uniform(const std::string &, float, float);
68 void uniform2(const std::string &, const float *);
69 void uniform(const std::string &, float, float, float);
70 void uniform(const std::string &, const Vector3 &);
71 void uniform3(const std::string &, const float *);
72 void uniform(const std::string &, float, float, float, float);
73 void uniform(const std::string &, const Vector4 &);
74 void uniform(const std::string &, const Color &);
75 void uniform4(const std::string &, const float *);
76 void uniform_matrix4(const std::string &, const float *);
77 void uniform_matrix4(const std::string &, const Matrix &);
78 void uniform1_array(const std::string &, unsigned, const float *);
79 void uniform2_array(const std::string &, unsigned, const float *);
80 void uniform3_array(const std::string &, unsigned, const float *);
81 void uniform4_array(const std::string &, unsigned, const float *);
82 void uniform_matrix4_array(const std::string &, unsigned, const float *);
85 const UniformBlock &get_block(const Program &, const Program::UniformBlockInfo *) const;
87 const UniformBlock &get_block(const Program &, const std::string &) const;