X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Fbatch.h;h=1fc225210f739a457278b7e5f6ba3ba87e62b4da;hb=99ca354f18119f82f1adeca100cd665a8f640317;hp=c2107f823c2907a28cf36e79b2c6190cdc486a1b;hpb=a60b558e1c327fd2e2600ad2551dc0ac648761f2;p=libs%2Fgl.git diff --git a/source/core/batch.h b/source/core/batch.h index c2107f82..1fc22521 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,42 +34,46 @@ public: private: PrimitiveType prim_type; - GLenum gl_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(); + 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(); } public: - unsigned size() const { return data.size()/get_index_size(); } + std::size_t get_index_size() const { return get_type_size(index_type); } + 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