8c81afba608a4b913d70ec8857123ee3b514d789
[demo] / src / opengl / shader-gl.h
1 #ifndef SHADER_GL_H_
2 #define SHADER_GL_H_
3
4 #include "shader.h"
5
6 class ShaderGL : public Shader {
7 protected:
8         /* bsz for vulkan, in opengl buf is 0 terminated */
9         virtual bool create(char *buf, unsigned int bsz, const char *fname);
10
11 public:
12         unsigned int sdr;
13
14         ShaderGL();
15         virtual ~ShaderGL();
16
17         virtual void destroy() override;
18 };
19
20 class ShaderProgramGL : public ShaderProgram {
21 protected:
22         unsigned int prog;
23         bool is_linked;
24
25 public:
26         ShaderProgramGL();
27         virtual ~ShaderProgramGL();
28
29         virtual void cache_uniforms() override;
30         virtual void delete_shaders() override;
31
32         virtual bool link() override;
33         virtual bool use() override;
34         virtual bool create() override;
35         virtual void destroy() override;
36         virtual void attach_shader(Shader *shader) override;
37
38         int get_uniform_location(const char *name) const;
39         int get_attribute_location(const char *name) const;
40
41         virtual void set_uniformi(int location, int value) override;
42         virtual void set_uniformi(int location, int x, int y) override;
43         virtual void set_uniformi(int location, int x, int y, int z) override;
44         virtual void set_uniformi(int location, int x, int y, int z, int w) override;
45
46         virtual void set_uniformf(int location, float value) override;
47         virtual void set_uniformf(int location, float x, float y) override;
48         virtual void set_uniformf(int location, float x, float y, float z) override;
49         virtual void set_uniformf(int location, float x, float y, float z, float w) override;
50
51         virtual void set_uniform_matrix(int location, const Mat4 &mat) override;
52 };
53
54 #endif // SHADER_GL_H_