X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fvertexsetup.h;h=bae4c5f36c2245d194eacc6b08b1df25658dade7;hp=c4cadfcaed49a9206d3ef500df6688b4f762edae;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hpb=f5ac652497f22b159b5e44bf69f44092ff91936b diff --git a/source/vertexsetup.h b/source/vertexsetup.h index c4cadfca..bae4c5f3 100644 --- a/source/vertexsetup.h +++ b/source/vertexsetup.h @@ -2,6 +2,7 @@ #define MSP_GL_VERTEXSETUP_H_ #include "bindable.h" +#include "vertexformat.h" namespace Msp { namespace GL { @@ -18,12 +19,18 @@ private: enum ComponentMask { VERTEX_ARRAY = 1, - INDEX_BUFFER = 2 + INSTANCE_ARRAY = 2, + INDEX_BUFFER = 4, + UNUSED_ATTRIBS = 8, + ATTRIB_SHIFT = 4 }; unsigned id; mutable unsigned dirty; - const VertexArray *array; + const VertexArray *vertex_array; + VertexFormat vertex_format; + const VertexArray *inst_array; + VertexFormat inst_format; const Buffer *index_buffer; public: @@ -31,13 +38,18 @@ public: ~VertexSetup(); void set_vertex_array(const VertexArray &); - void set_instance_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: + 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; + void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const; public: void bind() const;