]> git.tdb.fi Git - libs/gl.git/blob - source/program.h
Make Material::apply const
[libs/gl.git] / source / program.h
1 /* $Id$
2
3 This file is part of libmspgl
4 Copyright © 2007 Mikko Rasa, Mikkosoft Productions
5 Distributed under the LGPL
6 */
7
8 #ifndef MSP_GL_PROGRAM_H_
9 #define MSP_GL_PROGRAM_H_
10
11 #include <list>
12 #include <string>
13 #include <GL/gl.h>
14 #include <msp/datafile/loader.h>
15 #include "types.h"
16
17 namespace Msp {
18 namespace GL {
19
20 class Shader;
21
22 class Program
23 {
24 private:
25         uint id;
26         std::list<Shader *> shaders;
27         bool del_shaders;
28         bool linked;
29
30         static Program *cur_prog;
31
32 public:
33         class Loader: public DataFile::Loader
34         {
35         private:
36                 Program &prog;
37
38         public:
39                 Loader(Program &);
40                 ~Loader();
41
42         private:
43                 void vertex_shader(const std::string &);
44                 void fragment_shader(const std::string &);
45         };
46
47         Program();
48         Program(const std::string &, const std::string &);
49         virtual ~Program();
50
51         void attach_shader(Shader &shader);
52         void detach_shader(Shader &shader);
53         const std::list<Shader *> &get_shaders() const { return shaders; }
54         void set_del_shaders(bool);
55         void bind_attribute(int, const std::string &);
56         bool link();
57         int get_param(GLenum param) const;
58         bool get_linked() const { return linked; }
59         std::string get_info_log() const;
60         void bind();
61         int get_uniform_location(const std::string &) const;
62         void uniform(int, int);
63         void uniform(int, float);
64         void uniform(int, float, float);
65         void uniform(int, float, float, float);
66         void uniform(int, float, float, float, float);
67         void uniform4(int, const float *);
68         void uniform_matrix4(int, const float *);
69
70         static void unbind();
71
72 private:
73         void maybe_bind();
74 };
75
76 } // namespace GL
77 } // namespace Msp
78
79 #endif