#define MSP_GL_VERTEXSETUP_H_
#include "bindable.h"
+#include "vertexformat.h"
namespace Msp {
namespace GL {
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:
~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(bool) const;
+ void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const;
public:
void bind() const;