Add ability to buffer data to the middle of a vbo
This commit is contained in:
parent
80cb7f9528
commit
da9b871626
@ -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);
|
||||
|
||||
|
||||
@ -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))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user