1 #ifndef MSP_GL_BATCH_H_
2 #define MSP_GL_BATCH_H_
5 #include <msp/datafile/objectloader.h>
6 #include "bufferable.h"
8 #include "primitivetype.h"
16 Stores primitive type and element indices for a single GL draw call. Data
17 type for indices is automatically chosen to accommodate the largest index in
20 This is a pretty low-level class and mainly intended to be used by the Mesh
23 class Batch: public Bufferable
26 class Loader: public DataFile::ObjectLoader<Batch>
31 void indices(const std::vector<unsigned> &);
35 PrimitiveType prim_type;
39 std::vector<UInt8> data;
43 static unsigned restart_index;
46 Batch(PrimitiveType t);
49 PrimitiveType get_type() const { return prim_type; }
50 GLenum get_gl_primitive_type() const { return gl_prim_type; }
51 void set_index_type(DataType);
52 DataType get_index_type() const { return index_type; }
53 GLenum get_gl_index_type() const { return gl_index_type; }
55 DEPRECATED void set_data_type(DataType t) { set_index_type(t); }
56 DEPRECATED DataType get_data_type() const { return index_type; }
58 Batch &append(unsigned);
59 Batch &append(const std::vector<unsigned> &);
60 bool can_append(PrimitiveType);
61 Batch &append(const Batch &);
63 void append_index(unsigned);
64 virtual unsigned get_data_size() const { return data.size(); }
65 virtual const void *get_data_pointer() const { return &data[0]; }
66 virtual unsigned get_alignment() const { return get_index_size(); }
67 unsigned get_index_size() const;
69 unsigned size() const { return data.size()/get_index_size(); }
71 unsigned get_index(unsigned) const;