]> git.localhorst.tv Git - tacos.git/blob - src/graphics/shader.hpp
the usual suspects
[tacos.git] / src / graphics / shader.hpp
1 #ifndef TACOS_GRAPHICS_SHADER_HPP_
2 #define TACOS_GRAPHICS_SHADER_HPP_
3
4 #include <GL/glew.h>
5 #include <glm/glm.hpp>
6
7
8 namespace tacos {
9
10 class Shader {
11
12         friend class Program;
13
14 public:
15         static Shader Vertex(const GLchar *source);
16         static Shader Fragment(const GLchar *source);
17
18         ~Shader() noexcept;
19
20         Shader(Shader &&) noexcept;
21         Shader &operator =(Shader &&) noexcept;
22
23         Shader(const Shader &) = delete;
24         Shader &operator =(const Shader &) = delete;
25
26 private:
27         explicit Shader(GLenum type, const GLchar *source);
28
29 private:
30         GLuint shader;
31
32 };
33
34
35 class Program {
36
37 public:
38         Program();
39         ~Program() noexcept;
40
41         Program(const Program &) = delete;
42         Program &operator =(const Program &) = delete;
43
44         void Attach(const Shader &) noexcept;
45         void Link();
46
47         void Use() noexcept;
48
49         GLint AttributeLocation(const GLchar *name) const noexcept;
50         GLint UniformLocation(const GLchar *name) const noexcept;
51
52         void Uniform(GLint, GLint) noexcept;
53         void Uniform(GLint, float) noexcept;
54         void Uniform(GLint, const glm::vec3 &) noexcept;
55         void Uniform(GLint, const glm::vec4 &) noexcept;
56         void Uniform(GLint, const glm::mat4 &) noexcept;
57
58 private:
59         GLuint program;
60
61 };
62
63 }
64
65 #endif