]> git.tdb.fi Git - libs/gl.git/blobdiff - source/vertexsetup.h
Remove the deprecated ProgramBuilder class
[libs/gl.git] / source / vertexsetup.h
index 466eed40659d3d61fa8c9a27b00520ac43849c73..bae4c5f36c2245d194eacc6b08b1df25658dade7 100644 (file)
@@ -2,6 +2,7 @@
 #define MSP_GL_VERTEXSETUP_H_
 
 #include "bindable.h"
+#include "vertexformat.h"
 
 namespace Msp {
 namespace GL {
@@ -15,9 +16,21 @@ objects.  Intended for internal use.
 class VertexSetup: public Bindable<VertexSetup>
 {
 private:
+       enum ComponentMask
+       {
+               VERTEX_ARRAY = 1,
+               INSTANCE_ARRAY = 2,
+               INDEX_BUFFER = 4,
+               UNUSED_ATTRIBS = 8,
+               ATTRIB_SHIFT = 4
+       };
+
        unsigned id;
-       mutable bool dirty;
-       const VertexArray *array;
+       mutable unsigned dirty;
+       const VertexArray *vertex_array;
+       VertexFormat vertex_format;
+       const VertexArray *inst_array;
+       VertexFormat inst_format;
        const Buffer *index_buffer;
 
 public:
@@ -25,11 +38,18 @@ public:
        ~VertexSetup();
 
        void set_vertex_array(const VertexArray &);
+       void set_instance_array(const VertexArray *);
        void set_index_buffer(const Buffer &);
+       void refresh();
+       const VertexArray *get_vertex_array() const { return vertex_array; }
+       const VertexArray *get_instance_array() const { return inst_array; }
        const Buffer *get_index_buffer() const { return index_buffer; }
 
 private:
-       void update() const;
+       static unsigned get_attribs(const VertexFormat &);
+       static unsigned get_update_mask(unsigned, const VertexFormat &, const VertexArray &);
+       void update(unsigned) const;
+       void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const;
 
 public:
        void bind() const;