7 #include <gmath/gmath.h>
21 virtual bool create(char *buf, unsigned int bsz, const char *fname) = 0;
27 virtual ~Shader() = 0;
29 virtual bool load(const char *fname, SType type);
30 virtual void destroy() = 0;
44 std::vector<Uniform> uniforms;
48 virtual ~ShaderProgram();
50 virtual void cache_uniforms() = 0;
52 virtual void add_shader(Shader *sdr);
53 virtual void delete_shaders() = 0;
55 virtual bool create() = 0;
56 virtual bool link() = 0;
57 virtual bool use() = 0;
58 virtual void destroy() = 0;
59 virtual void attach_shader(Shader *shader) = 0;
62 THIS PART MIGHT NEED SEVERAL CHANGES: on vulkan we set the uniforms
63 using descriptor sets. The current design is suitable for OpenGL and
64 it *might* have to be rewritten to work with both APIs later
67 virtual void set_uniformi(int location, int value) = 0;
68 virtual void set_uniformi(int location, int x, int y) = 0;
69 virtual void set_uniformi(int location, int x, int y, int z) = 0;
70 virtual void set_uniformi(int location, int x, int y, int z, int w) = 0;
72 virtual void set_uniformf(int location, float value) = 0;
73 virtual void set_uniformf(int location, float x, float y) = 0;
74 virtual void set_uniformf(int location, float x, float y, float z) = 0;
75 virtual void set_uniformf(int location, float x, float y, float z, float w) = 0;
77 virtual void set_uniform_matrix(int location, const Mat4 &mat) = 0;
80 ShaderProgram *get_current_program();