X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fcore%2Fbatch.h;h=dd07adb58b632941d0264350b783b386efd97fdc;hp=51cc573b18be326ac7b3ae4c26b75cf146e77aa6;hb=7ef75a4c4dbfc437e466381dd67c23357e607b82;hpb=3a1b9cbe2441ae670a97541dc8ccb0a2860c8302 diff --git a/source/core/batch.h b/source/core/batch.h index 51cc573b..dd07adb5 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 @@ -33,39 +34,46 @@ public: private: PrimitiveType prim_type; - GLenum gl_prim_type; DataType index_type; - GLenum gl_index_type; std::vector data; unsigned max_index; public: - Batch(PrimitiveType t); - ~Batch(); + Batch(PrimitiveType); PrimitiveType get_type() const { return prim_type; } - GLenum get_gl_primitive_type() const { return gl_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