-bool Bufferable::resize_buffer() const
-{
- if(offset+get_data_size()>=buffer->get_size())
- {
- const Bufferable *last = this;
- for(; last->next_in_buffer; last=last->next_in_buffer) ;
-
- unsigned total_size = last->offset+last->get_data_size();
-
- if(total_size>buffer->get_size())
- {
- buffer->data(total_size, 0);
- return true;
- }
- }
-
- return false;
-}
-
-void Bufferable::update_buffer_size() const
-{
- if(resize_buffer())
- {
- Conditional<BindRestore> _bind(!ARB_direct_state_access, buffer, buffer->get_type());
-
- /* Resizing the buffer invalidates its contents. Non-dirty data may
- be in use, so reupload it. */
- for(const Bufferable *b=prev_in_buffer; b; b=b->prev_in_buffer)
- if(!b->dirty)
- b->upload_data(0);
- for(const Bufferable *b=next_in_buffer; b; b=b->next_in_buffer)
- if(!b->dirty)
- b->upload_data(0);
- }
-}
-