#include <list>
#include <string>
#include <GL/gl.h>
-#include "shader.h"
+#include <msp/datafile/loader.h>
#include "types.h"
namespace Msp {
class Program
{
+private:
+ uint id;
+ std::list<Shader *> shaders;
+ bool del_shaders;
+ bool linked;
+
+ static Program *cur_prog;
+
public:
+ class Loader: public DataFile::Loader
+ {
+ private:
+ Program &prog;
+
+ public:
+ Loader(Program &);
+
+ private:
+ void vertex_shader(const std::string &);
+ void fragment_shader(const std::string &);
+ void attribute(uint, const std::string &);
+ virtual void finish();
+ };
+
Program();
+ Program(const std::string &, const std::string &);
virtual ~Program();
void attach_shader(Shader &shader);
void detach_shader(Shader &shader);
- bool link();
+ const std::list<Shader *> &get_shaders() const { return shaders; }
+ void set_del_shaders(bool);
+ void bind_attribute(uint, const std::string &);
+ void link();
int get_param(GLenum param) const;
+ bool get_linked() const { return linked; }
std::string get_info_log() const;
void bind();
+ int get_uniform_location(const std::string &) const;
static void unbind();
-private:
- uint id;
- std::list<Shader *> shaders;
- bool linked;
- static Program *cur_prog;
+private:
+ void maybe_bind();
};
} // namespace GL