]> git.tdb.fi Git - libs/gl.git/blobdiff - source/batch.h
Better naming algorithm for objects in scene export
[libs/gl.git] / source / batch.h
index dcc2168b312f7c6323442b7e2b52296639156ff7..10c61a289e2e5afb71e94c6049126ee4fcbfe877 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <vector>
 #include <msp/datafile/objectloader.h>
+#include "bufferable.h"
 #include "datatype.h"
 #include "primitivetype.h"
 
@@ -19,7 +20,7 @@ the Batch.
 This is a pretty low-level class and mainly intended to be used by the Mesh
 class.
 */
-class Batch
+class Batch: public Bufferable
 {
 public:
        class Loader: public DataFile::ObjectLoader<Batch>
@@ -37,11 +38,6 @@ private:
        unsigned min_index;
        unsigned max_index;
        bool restart;
-       Buffer *ibuf;
-       unsigned ibuf_offset;
-       Batch *next_in_ibuf;
-       Batch *prev_in_ibuf;
-       mutable bool dirty;
 
        static unsigned restart_index;
 
@@ -52,16 +48,16 @@ public:
        PrimitiveType get_type() const { return prim_type; }
        void set_data_type(DataType);
        DataType get_data_type() const { return data_type; }
-       void use_index_buffer(Buffer *, Batch * = 0);
-private:
-       void unlink_from_ibuf();
-       void update_ibuf_offsets();
 
-public:
        Batch &append(unsigned);
-       void append(const std::vector<unsigned> &);
-       void append(const Batch &);
+       Batch &append(const std::vector<unsigned> &);
+       bool can_append(PrimitiveType);
+       Batch &append(const Batch &);
 private:
+       void append_index(unsigned);
+       virtual unsigned 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;
 public:
        unsigned size() const { return data.size()/get_index_size(); }
@@ -69,6 +65,8 @@ public:
        unsigned get_index(unsigned) const;
 
        void draw() const;
+private:
+       static void set_restart_index(unsigned);
 };
 
 } // namespace GL