-/* $Id$
-
-This file is part of libmspgl
-Copyright © 2007, 2009-2010 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#ifndef MSP_GL_BATCH_H_
#define MSP_GL_BATCH_H_
#include <vector>
#include <msp/datafile/objectloader.h>
+#include "bufferable.h"
#include "datatype.h"
#include "primitivetype.h"
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>
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;
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);
- Batch &append(unsigned);
- void append(const std::vector<unsigned> &);
- void append(const Batch &);
- unsigned size() const { return data.size()/get_index_size(); }
- unsigned get_index(unsigned) const;
- void draw() const;
+ Batch &append(unsigned);
+ 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(); }
- template<typename T>
- void append_index(T);
-
- template<typename T, typename U>
- void expand_data();
-
- template<typename T, typename U>
- void shrink_data();
-
- template<typename T, typename U>
- U convert(T) const;
+ unsigned get_index(unsigned) const;
- void unlink_from_ibuf();
- void update_ibuf_offsets();
+ void draw() const;
+ void draw_instanced(unsigned) const;
+private:
+ const void *setup_draw() const;
+ static void set_restart_index(unsigned);
};
} // namespace GL