+ append_index(other.get_index(i));
+
+ update_offset();
+ dirty = true;
+}
+
+void Batch::append_index(unsigned i)
+{
+ if(data.empty())
+ min_index = max_index = i;
+ else
+ {
+ min_index = min(min_index, i);
+ max_index = max(max_index, i);
+ }
+
+ if((data_type==UNSIGNED_BYTE || data_type==UNSIGNED_SHORT) && max_index>0xFFFE)
+ set_data_type(UNSIGNED_INT);
+ else if(data_type==UNSIGNED_BYTE && max_index>0xFE)
+ set_data_type(UNSIGNED_SHORT);
+
+ if(data_type==UNSIGNED_SHORT)
+ ::append<unsigned short>(data, i);
+ else if(data_type==UNSIGNED_INT)
+ ::append<unsigned>(data, i);
+ else
+ data.push_back(i);
+}
+
+void Batch::upload_data() const
+{
+ get_buffer()->sub_data(get_offset(), data.size(), &data[0]);