X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fvertexsetup.h;h=208e55d3cd676729d4299024feaad06a273bf3d2;hp=bae4c5f36c2245d194eacc6b08b1df25658dade7;hb=38712d8ecc57d043a2419ffbaeeb57f7a6586f14;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266 diff --git a/source/core/vertexsetup.h b/source/core/vertexsetup.h index bae4c5f3..208e55d3 100644 --- a/source/core/vertexsetup.h +++ b/source/core/vertexsetup.h @@ -1,59 +1,62 @@ #ifndef MSP_GL_VERTEXSETUP_H_ #define MSP_GL_VERTEXSETUP_H_ -#include "bindable.h" +#include "datatype.h" #include "vertexformat.h" +#include "vertexsetup_backend.h" 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: public VertexSetupBackend { + friend VertexSetupBackend; + private: enum ComponentMask { VERTEX_ARRAY = 1, INSTANCE_ARRAY = 2, - INDEX_BUFFER = 4, - UNUSED_ATTRIBS = 8, - ATTRIB_SHIFT = 4 + INDEX_BUFFER = 4 }; - unsigned id; - mutable unsigned dirty; - const VertexArray *vertex_array; + mutable unsigned dirty = 0; + const VertexArray *vertex_array = 0; VertexFormat vertex_format; - const VertexArray *inst_array; + const VertexArray *inst_array = 0; VertexFormat inst_format; - const Buffer *index_buffer; + const Buffer *index_buffer = 0; + DataType index_type = UNSIGNED_SHORT; 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_index_buffer(const Buffer &); - void refresh(); + void set_instance_array(const VertexArray &); + void set_index_buffer(const Buffer &, DataType); 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; } + DataType get_index_type() const { return index_type; } 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 VertexArray &, unsigned, unsigned, bool) const; + static bool verify_format(const VertexFormat &); + void update() const; public: - void bind() const; - static void unbind(); + void refresh() const { if(dirty) update(); } + + void unload(); + + using VertexSetupBackend::set_debug_name; }; } // namespace GL