quick backup:
[demo] / src / opengl / shader-gl.h
index e5e6390..8c81afb 100644 (file)
@@ -6,30 +6,49 @@
 class ShaderGL : public Shader {
 protected:
        /* bsz for vulkan, in opengl buf is 0 terminated */
-       unsigned int sdr;
        virtual bool create(char *buf, unsigned int bsz, const char *fname);
 
 public:
+       unsigned int sdr;
+
        ShaderGL();
        virtual ~ShaderGL();
 
        virtual void destroy() override;
-       virtual void attach(unsigned int prog) override;
 };
 
 class ShaderProgramGL : public ShaderProgram {
 protected:
        unsigned int prog;
+       bool is_linked;
 
 public:
        ShaderProgramGL();
        virtual ~ShaderProgramGL();
 
-       void destroy();
-       void delete_shaders();
+       virtual void cache_uniforms() override;
+       virtual void delete_shaders() override;
+
        virtual bool link() override;
-       virtual bool load(const char *vfname, const char *ffname) override;
-       virtual void use() override;
+       virtual bool use() override;
+       virtual bool create() override;
+       virtual void destroy() override;
+       virtual void attach_shader(Shader *shader) override;
+
+       int get_uniform_location(const char *name) const;
+       int get_attribute_location(const char *name) const;
+
+       virtual void set_uniformi(int location, int value) override;
+       virtual void set_uniformi(int location, int x, int y) override;
+       virtual void set_uniformi(int location, int x, int y, int z) override;
+       virtual void set_uniformi(int location, int x, int y, int z, int w) override;
+
+       virtual void set_uniformf(int location, float value) override;
+       virtual void set_uniformf(int location, float x, float y) override;
+       virtual void set_uniformf(int location, float x, float y, float z) override;
+       virtual void set_uniformf(int location, float x, float y, float z, float w) override;
+
+       virtual void set_uniform_matrix(int location, const Mat4 &mat) override;
 };
 
 #endif // SHADER_GL_H_
\ No newline at end of file