X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fvertexsetup.h;h=408d738012fb196be44555c3bb25b9fe9672582a;hb=c4d81a13ca8ac1479eca78ee190f3762ef3cbec4;hp=51183af52b64a1e3b9d521511a255215cb626955;hpb=a5a26e4e2eb2d0b05c3531b667411be657ac74f1;p=libs%2Fgl.git diff --git a/source/core/vertexsetup.h b/source/core/vertexsetup.h index 51183af5..408d7380 100644 --- a/source/core/vertexsetup.h +++ b/source/core/vertexsetup.h @@ -7,22 +7,21 @@ namespace Msp { namespace GL { +class Buffer; class VertexArray; /** Combines a VertexArray with an index buffer. This wraps OpenGL's vertex array objects. Intended for internal use. */ -class VertexSetup: public Bindable +class VertexSetup { private: enum ComponentMask { VERTEX_ARRAY = 1, INSTANCE_ARRAY = 2, - INDEX_BUFFER = 4, - UNUSED_ATTRIBS = 8, - ATTRIB_SHIFT = 4 + INDEX_BUFFER = 4 }; unsigned id; @@ -37,24 +36,25 @@ public: VertexSetup(); ~VertexSetup(); + void set_format(const VertexFormat &); + void set_format_instanced(const VertexFormat &, const VertexFormat &); + 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 bool verify_array(const VertexArray &); - static unsigned get_attribs(const VertexFormat &); - static unsigned get_update_mask(unsigned, const VertexFormat &, const VertexArray &); - void update(unsigned) const; + static bool verify_format(const VertexFormat &); + void update() const; void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const; public: - void bind() const; - static void unbind(); + void refresh() const { if(dirty) update(); } + + unsigned get_id() const { return id; } void unload();