+ virtual ~ShaderProgram();
+
+ virtual bool create() = 0;
+ virtual bool link() = 0;
+ virtual bool use() const = 0;
+ virtual void destroy() = 0;
+ virtual void attach_shader(Shader *shader) = 0;
+
+ /*
+ THIS PART MIGHT NEED SEVERAL CHANGES: on vulkan we set the uniforms
+ using descriptor sets. The current design is suitable for OpenGL and
+ it *might* have to be rewritten to work with both APIs later
+ */
+ virtual int get_uniform_location(const char *name) const = 0;
+
+ virtual void set_uniformi(int location, int value) = 0;
+ virtual void set_uniformi(int location, int x, int y) = 0;
+ virtual void set_uniformi(int location, int x, int y, int z) = 0;
+ virtual void set_uniformi(int location, int x, int y, int z, int w) = 0;
+
+ virtual void set_uniformf(int location, float value) = 0;
+ virtual void set_uniformf(int location, float x, float y) = 0;
+ virtual void set_uniformf(int location, float x, float y, float z) = 0;
+ virtual void set_uniformf(int location, float x, float y, float z, float w) = 0;