#define MSP_GL_PROGRAMDATA_H_
#include <map>
+#include <stdexcept>
#include <msp/datafile/objectloader.h>
#include "datatype.h"
#include "matrix.h"
namespace Msp {
namespace GL {
+class too_many_uniforms: public std::runtime_error
+{
+public:
+ too_many_uniforms(const std::string &w): std::runtime_error(w) { }
+ virtual ~too_many_uniforms() throw() { }
+};
+
class Buffer;
class Uniform;
class UniformBlock;
public:
ProgramData(const Program * = 0);
ProgramData(const ProgramData &);
+ ProgramData(const ProgramData &, const Program *);
ProgramData &operator=(const ProgramData &);
~ProgramData();
private:
void uniform(const std::string &, Uniform *);
+ template<typename T, typename V>
+ void uniform(const std::string &, V);
+ template<typename T, typename V>
+ void uniform_array(const std::string &, unsigned, V);
+ bool validate_name(const std::string &) const;
+ void add_uniform(const std::string &, Uniform *);
public:
void uniform(const std::string &, const Uniform &);
void uniform(const std::string &, int);
std::vector<std::string> get_uniform_names() const;
const Uniform &get_uniform(const std::string &) const;
+ const Uniform *find_uniform(const std::string &) const;
private:
static bool uniform_name_compare(const NamedUniform &, const std::string &);