Add ability to buffer data to the middle of a vbo

This commit is contained in:
rexy712 2022-01-18 15:28:10 -08:00
parent 80cb7f9528
commit da9b871626
2 changed files with 14 additions and 0 deletions

View File

@ -70,6 +70,7 @@ namespace gfx{
bool bind(gl_buffer_manager& b)const;
//add data to the end of this buffer (starts loading at data+get_size())
bool buffer(const void* data, size_t datasize);
bool buffer(const void* data, size_t datasize, size_t start);
//change capacity of buffer
bool resize(size_t newcap);

View File

@ -75,6 +75,19 @@ namespace gfx{
m_buffer_size += datasize;
return true;
}
bool vbo::buffer(const void* data, size_t datasize, size_t start){
const size_t capacity = get_cap();
const size_t space_from_end = capacity - start;
if(datasize > space_from_end){
const size_t difference = datasize - space_from_end;
if(!resize(rexy::max(difference, capacity * 2))){
return false;
}
}
glNamedBufferSubData(m_buffer, start, datasize, data);
m_buffer_size = rexy::max(m_buffer_size, datasize + start);
return true;
}
bool vbo::resize(size_t newsize){
vbo tmp(newsize, get_usage());
if(!copy_buffer(tmp, *this))