#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<VertexSetup>
+class VertexSetup: public VertexSetupBackend
{
+ friend VertexSetupBackend;
+
private:
enum ComponentMask
{
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 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_format(const VertexFormat &);
- void update(unsigned) const;
- void update_vertex_array(const VertexArray &, unsigned, unsigned, bool) const;
+ void update() const;
public:
- void bind() const;
- static void unbind();
+ void refresh() const { if(dirty) update(); }
void unload();
- void set_debug_name(const std::string &);
+ using VertexSetupBackend::set_debug_name;
};
} // namespace GL