Sprite Draw: Fixed buffer update
This commit is contained in:
@@ -103,6 +103,29 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (DIVA_GL_VERSION_4_5) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_STREAM_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (DIVA_GL_VERSION_4_5) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
glBufferData(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_STREAM_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::UnmapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace GL {
|
||||
void Destroy();
|
||||
void* MapMemory(gl_state_struct& gl_st);
|
||||
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
void UnmapMemory(gl_state_struct& gl_st);
|
||||
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
|
||||
|
||||
@@ -103,6 +103,29 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_element_array_buffer(buffer);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_STREAM_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_element_array_buffer(buffer);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_STREAM_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ElementArrayBuffer::UnmapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace GL {
|
||||
void Destroy();
|
||||
void* MapMemory(gl_state_struct& gl_st);
|
||||
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
void UnmapMemory(gl_state_struct& gl_st);
|
||||
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
|
||||
|
||||
@@ -103,6 +103,29 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_shader_storage_buffer(buffer);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, GL_STREAM_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_shader_storage_buffer(buffer);
|
||||
glBufferData(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_STREAM_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void ShaderStorageBuffer::UnmapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace GL {
|
||||
void Destroy();
|
||||
void* MapMemory(gl_state_struct& gl_st);
|
||||
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
void UnmapMemory(gl_state_struct& gl_st);
|
||||
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
|
||||
|
||||
@@ -103,6 +103,29 @@ namespace GL {
|
||||
return 0;
|
||||
}
|
||||
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_uniform_buffer(buffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, GL_STREAM_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void UniformBuffer::Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
Destroy();
|
||||
Create(gl_st, size, data, dynamic);
|
||||
}
|
||||
else {
|
||||
gl_st.bind_uniform_buffer(buffer);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_STREAM_DRAW : GL_STATIC_DRAW);
|
||||
}
|
||||
}
|
||||
|
||||
void UniformBuffer::UnmapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -34,6 +34,8 @@ namespace GL {
|
||||
void Destroy();
|
||||
void* MapMemory(gl_state_struct& gl_st);
|
||||
void* MapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size);
|
||||
void Recreate(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic = false);
|
||||
void UnmapMemory(gl_state_struct& gl_st);
|
||||
void UnmapMemory(p_gl_rend_state& p_gl_rend_st);
|
||||
void WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data);
|
||||
|
||||
+6
-23
@@ -261,20 +261,10 @@ namespace spr {
|
||||
static const GLsizei buffer_size_uv2 = sizeof(sprite_vertex_data_uv2);
|
||||
|
||||
if (vbo_vertex_count < vertex_buffer.size() / sizeof(sprite_vertex_data_uv2)) {
|
||||
while (vbo_vertex_count < vertex_buffer.size())
|
||||
while (vbo_vertex_count < vertex_buffer.size() / sizeof(sprite_vertex_data_uv2))
|
||||
vbo_vertex_count *= 2;
|
||||
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
vbo.Destroy();
|
||||
vbo.Create(gl_state, buffer_size_uv2 * vbo_vertex_count);
|
||||
gl_state.bind_array_buffer(vbo, true);
|
||||
}
|
||||
else {
|
||||
gl_state.bind_array_buffer(vbo, true);
|
||||
|
||||
glBufferData(GL_ARRAY_BUFFER,
|
||||
(GLsizeiptr)vbo_vertex_count, 0, GL_DYNAMIC_DRAW);
|
||||
}
|
||||
vbo.Recreate(gl_state, buffer_size_uv2 * vbo_vertex_count);
|
||||
|
||||
gl_state.bind_vertex_array(vao[0]);
|
||||
gl_state.bind_array_buffer(vbo, true);
|
||||
@@ -322,17 +312,7 @@ namespace spr {
|
||||
while (ebo_index_count < index_buffer.size())
|
||||
ebo_index_count *= 2;
|
||||
|
||||
if (DIVA_GL_VERSION_4_4) {
|
||||
ebo.Destroy();
|
||||
ebo.Create(gl_state, sizeof(uint32_t) * ebo_index_count);
|
||||
gl_state.bind_element_array_buffer(ebo, true);
|
||||
}
|
||||
else {
|
||||
gl_state.bind_element_array_buffer(ebo, true);
|
||||
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)(sizeof(uint32_t)
|
||||
* ebo_index_count), 0, GL_DYNAMIC_DRAW);
|
||||
}
|
||||
ebo.Recreate(gl_state, sizeof(uint32_t) * ebo_index_count);
|
||||
|
||||
gl_state.bind_vertex_array(vao[0]);
|
||||
gl_state.bind_element_array_buffer(ebo, true);
|
||||
@@ -346,6 +326,9 @@ namespace spr {
|
||||
}
|
||||
|
||||
ebo.WriteMemory(gl_state, 0, sizeof(uint32_t) * index_buffer.size(), index_buffer.data());
|
||||
|
||||
gl_state.bind_array_buffer(0);
|
||||
gl_state.bind_element_array_buffer(0);
|
||||
}
|
||||
|
||||
void SpriteManager::Draw(render_data_context& rend_data_ctx,
|
||||
|
||||
Reference in New Issue
Block a user