]> git.tdb.fi Git - libs/gl.git/blobdiff - source/program.h
Make Material::apply const
[libs/gl.git] / source / program.h
index 5b1ae29f3ed0681b9a4eb930d938a712fecfacdc..af249edefa2066c29bcf23e7c6f643ddd7d6c95c 100644 (file)
@@ -11,7 +11,7 @@ Distributed under the LGPL
 #include <list>
 #include <string>
 #include <GL/gl.h>
-#include "shader.h"
+#include <msp/datafile/loader.h>
 #include "types.h"
 
 namespace Msp {
@@ -21,24 +21,56 @@ class Shader;
 
 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 &);
+               ~Loader();
+
+       private:
+               void vertex_shader(const std::string &);
+               void fragment_shader(const std::string &);
+       };
+
        Program();
+       Program(const std::string &, const std::string &);
        virtual ~Program();
 
        void attach_shader(Shader &shader);
        void detach_shader(Shader &shader);
+       const std::list<Shader *> &get_shaders() const { return shaders; }
+       void set_del_shaders(bool);
+       void bind_attribute(int, const std::string &);
        bool 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;
+       void uniform(int, int);
+       void uniform(int, float);
+       void uniform(int, float, float);
+       void uniform(int, float, float, float);
+       void uniform(int, float, float, float, float);
+       void uniform4(int, const float *);
+       void uniform_matrix4(int, const float *);
 
        static void unbind();
-private:
-       uint id;
-       std::list<Shader *> shaders;
-       bool linked;
 
-       static Program *cur_prog;
+private:
+       void maybe_bind();
 };
 
 } // namespace GL