#ifndef MSP_GL_VERTEXSETUP_H_
#define MSP_GL_VERTEXSETUP_H_
-#include "bindable.h"
+#include "datatype.h"
#include "vertexformat.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<VertexSetup>
+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;
const VertexArray *inst_array;
VertexFormat inst_format;
const Buffer *index_buffer;
+ DataType index_type;
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 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 &);
+ static void require_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();