X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fbatch.h;h=45101d4356672950dc9439a5401ed1a3311bc307;hp=3fedeaf83db8a80e642edf801789abdc55a55b48;hb=959efbf61663efd7879070ce0447e02c8a447ce0;hpb=ebef7085e2672866189ccdb3a89e977e678a89b9 diff --git a/source/core/batch.h b/source/core/batch.h index 3fedeaf8..45101d43 100644 --- a/source/core/batch.h +++ b/source/core/batch.h @@ -3,6 +3,7 @@ #include #include +#include "batch_backend.h" #include "bufferable.h" #include "datatype.h" #include "primitivetype.h" @@ -13,14 +14,14 @@ namespace GL { class Buffer; /** -Stores primitive type and element indices for a single GL draw call. Data -type for indices is automatically chosen to accommodate the largest index in -the Batch. +Stores primitive type and element indices for a single draw call. -This is a pretty low-level class and mainly intended to be used by the Mesh -class. +Data type for indices is automatically chosen to accommodate the largest +index, but can also be manually overridden. + +Batches are normally contained in a Mesh. */ -class Batch: public Bufferable +class Batch: public BatchBackend, public Bufferable { public: class Loader: public DataFile::ObjectLoader @@ -34,39 +35,46 @@ public: private: PrimitiveType prim_type; DataType index_type; - GLenum gl_index_type; - std::vector data; + std::vector data; unsigned max_index; - bool restart; - - static unsigned restart_index; public: - Batch(PrimitiveType t); + Batch(PrimitiveType); ~Batch(); PrimitiveType get_type() const { return prim_type; } + + /** Sets the data type for indices. Allowed types are UNSIGNED_SHORT and + UNSIGNED_INT. It's an error to specify a type which can't hold the current + range of index values. */ void set_index_type(DataType); - DataType get_index_type() const { return index_type; } - GLenum get_gl_index_type() const { return gl_index_type; } - DEPRECATED void set_data_type(DataType t) { set_index_type(t); } - DEPRECATED DataType get_data_type() const { return index_type; } + DataType get_index_type() const { return index_type; } + /** Appends a single index. The data type is automatically adjusted if the + index is too large for the current data type. */ Batch &append(unsigned); + Batch &append(const std::vector &); + + /** Checks if it's possible to append another Batch with a given primitive + type. */ bool can_append(PrimitiveType); + + /** Appends another batch. Additional indices may be inserted in order to + join the primitives. */ Batch &append(const Batch &); + private: void append_index(unsigned); - virtual unsigned get_data_size() const { return data.size(); } + virtual std::size_t get_data_size() const { return data.size(); } virtual const void *get_data_pointer() const { return &data[0]; } - virtual unsigned get_alignment() const { return get_index_size(); } - unsigned get_index_size() const; + virtual std::size_t get_alignment() const { return get_index_size(); } + std::size_t get_index_size() const; public: - unsigned size() const { return data.size()/get_index_size(); } + std::size_t size() const { return data.size()/get_index_size(); } - unsigned get_index(unsigned) const; + unsigned get_index(std::size_t) const; }; } // namespace GL