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;
|
bool bind(gl_buffer_manager& b)const;
|
||||||
//add data to the end of this buffer (starts loading at data+get_size())
|
//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);
|
||||||
|
bool buffer(const void* data, size_t datasize, size_t start);
|
||||||
//change capacity of buffer
|
//change capacity of buffer
|
||||||
bool resize(size_t newcap);
|
bool resize(size_t newcap);
|
||||||
|
|
||||||
|
|||||||
@ -75,6 +75,19 @@ namespace gfx{
|
|||||||
m_buffer_size += datasize;
|
m_buffer_size += datasize;
|
||||||
return true;
|
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){
|
bool vbo::resize(size_t newsize){
|
||||||
vbo tmp(newsize, get_usage());
|
vbo tmp(newsize, get_usage());
|
||||||
if(!copy_buffer(tmp, *this))
|
if(!copy_buffer(tmp, *this))
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user