]> git.localhorst.tv Git - blank.git/blob - src/shader.hpp
moved some stuff around
[blank.git] / src / shader.hpp
1 #ifndef BLANK_SHADER_HPP_
2 #define BLANK_SHADER_HPP_
3
4 #include <iosfwd>
5 #include <list>
6 #include <GL/glew.h>
7
8
9 namespace blank {
10
11 class Shader {
12
13 public:
14         explicit Shader(GLenum type);
15         ~Shader();
16
17         Shader(Shader &&);
18         Shader &operator =(Shader &&);
19
20         Shader(const Shader &) = delete;
21         Shader &operator =(const Shader &) = delete;
22
23         void Source(const GLchar *src);
24         void Compile();
25         bool Compiled() const;
26         void Log(std::ostream &) const;
27
28         void AttachToProgram(GLuint id) const;
29
30 private:
31         GLuint handle;
32
33 };
34
35
36 class Program {
37
38 public:
39         Program();
40         ~Program();
41
42         Program(const Program &) = delete;
43         Program &operator =(const Program &) = delete;
44
45         const Shader &LoadShader(GLenum type, const GLchar *src);
46         void Attach(Shader &);
47         void Link();
48         bool Linked() const;
49         void Log(std::ostream &) const;
50
51         GLint UniformLocation(const GLchar *name) const;
52
53         void Use() const { glUseProgram(handle); }
54
55 private:
56         GLuint handle;
57         std::list<Shader> shaders;
58
59 };
60
61 }
62
63 #endif