X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fbatch.cpp;h=a59fad99f03b988309ef60042324df71ebf3c6ab;hp=37e4801ec82a6356a595a4dea62de926bf790d3e;hb=f50822b9e73a6ecdacbc4af4c4d9aba435a72386;hpb=463746f62d9b48f9fbbba3b2fcf7354067873e94 diff --git a/source/batch.cpp b/source/batch.cpp index 37e4801e..a59fad99 100644 --- a/source/batch.cpp +++ b/source/batch.cpp @@ -225,6 +225,17 @@ unsigned Batch::get_index(unsigned i) const } void Batch::draw() const +{ + BindRestore _bind_ibuf(get_buffer(), ELEMENT_ARRAY_BUFFER); + const void *data_ptr = setup_draw(); + + if(EXT_draw_range_elements) + glDrawRangeElements(prim_type, min_index, max_index, size(), data_type, data_ptr); + else + glDrawElements(prim_type, size(), data_type, data_ptr); +} + +const void *Batch::setup_draw() const { if(restart) { @@ -242,23 +253,15 @@ void Batch::draw() const else if(restart_index && restart_index<=max_index) set_restart_index(0); - const Buffer *ibuf = get_buffer(); - const void *data_ptr; - BindRestore _bind_ibuf(ibuf, ELEMENT_ARRAY_BUFFER); - if(ibuf) + if(get_buffer()) { if(dirty) update_buffer(); - data_ptr = reinterpret_cast(get_offset()); + return reinterpret_cast(get_offset()); } else - data_ptr = &data[0]; - - if(EXT_draw_range_elements) - glDrawRangeElements(prim_type, min_index, max_index, size(), data_type, data_ptr); - else - glDrawElements(prim_type, size(), data_type, data_ptr); + return &data[0]; } void Batch::set_restart_index(unsigned index)