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);
49 std::map<unsigned, const Uniform *const *> uniforms;
54 typedef std::map<std::string, Uniform *> UniformMap;
55 typedef std::map<unsigned, Block> BlockMap;
57 // XXX All these mutables are a bit silly, but I'm out of better ideas
59 mutable BlockMap blocks;
60 mutable UniformBlock *last_block;
61 mutable Buffer *buffer;
62 mutable Changes changes;
64 ProgramData &operator=(const ProgramData &);
67 ProgramData(const ProgramData &);
71 void uniform(const std::string &, Uniform *);
73 void uniform(const std::string &, int);
74 void uniform(const std::string &, float);
75 void uniform(const std::string &, float, float);
76 void uniform2(const std::string &, const float *);
77 void uniform(const std::string &, float, float, float);
78 void uniform(const std::string &, const Vector3 &);
79 void uniform3(const std::string &, const float *);
80 void uniform(const std::string &, float, float, float, float);
81 void uniform(const std::string &, const Vector4 &);
82 void uniform(const std::string &, const Color &);
83 void uniform4(const std::string &, const float *);
84 void uniform_matrix4(const std::string &, const float *);
85 void uniform_matrix4(const std::string &, const Matrix &);
86 void uniform1_array(const std::string &, unsigned, const float *);
87 void uniform2_array(const std::string &, unsigned, const float *);
88 void uniform3_array(const std::string &, unsigned, const float *);
89 void uniform4_array(const std::string &, unsigned, const float *);
90 void uniform_matrix4_array(const std::string &, unsigned, const float *);
93 void find_uniforms_for_block(Block &, const Program::UniformBlockInfo &) const;
94 UniformBlock *create_block(const Program::UniformBlockInfo &) const;
95 const UniformBlock *get_block(const Program &, const Program::UniformBlockInfo *) const;
97 const UniformBlock *get_block(const Program &, const std::string &) const;