mirror of
https://github.com/korenkonder/ReDIVA.git
synced 2026-10-06 13:48:01 +03:00
gl_rend_state massive overhaul. Created render_data_context
This commit is contained in:
+60
-15
@@ -5,13 +5,10 @@
|
||||
|
||||
#include "array_buffer.hpp"
|
||||
#include "../gl_rend_state.hpp"
|
||||
#include "../gl_state.hpp"
|
||||
|
||||
namespace GL {
|
||||
void ArrayBuffer::Bind(bool force) {
|
||||
gl_rend_state.bind_array_buffer(buffer, force);
|
||||
}
|
||||
|
||||
void ArrayBuffer::Create(size_t size) {
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
@@ -21,7 +18,7 @@ namespace GL {
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_rend_state.bind_array_buffer(buffer, true);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
if (GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size,
|
||||
0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT);
|
||||
@@ -30,7 +27,7 @@ namespace GL {
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::Create(size_t size, const void* data, bool dynamic) {
|
||||
void ArrayBuffer::Create(gl_state_struct& gl_st, size_t size, const void* data, bool dynamic) {
|
||||
if (buffer)
|
||||
return;
|
||||
|
||||
@@ -41,7 +38,7 @@ namespace GL {
|
||||
}
|
||||
else {
|
||||
glGenBuffers(1, &buffer);
|
||||
gl_rend_state.bind_array_buffer(buffer, true);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
if (GL_VERSION_4_4)
|
||||
glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data,
|
||||
dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0);
|
||||
@@ -58,7 +55,7 @@ namespace GL {
|
||||
}
|
||||
}
|
||||
|
||||
void* ArrayBuffer::MapMemory() {
|
||||
void* ArrayBuffer::MapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
@@ -66,7 +63,7 @@ namespace GL {
|
||||
if (GL_VERSION_4_5)
|
||||
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
|
||||
else {
|
||||
gl_rend_state.bind_array_buffer(buffer);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
@@ -77,12 +74,36 @@ namespace GL {
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_rend_state.bind_array_buffer(0);
|
||||
gl_st.bind_array_buffer(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ArrayBuffer::UnmapMemory() {
|
||||
void* ArrayBuffer::MapMemory(p_gl_rend_state& p_gl_rend_st) {
|
||||
if (!buffer)
|
||||
return 0;
|
||||
|
||||
void* data;
|
||||
if (GL_VERSION_4_5)
|
||||
data = glMapNamedBuffer(buffer, GL_WRITE_ONLY);
|
||||
else {
|
||||
p_gl_rend_st.bind_array_buffer(buffer);
|
||||
data = glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
|
||||
}
|
||||
|
||||
if (data)
|
||||
return data;
|
||||
|
||||
if (GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
p_gl_rend_st.bind_array_buffer(0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ArrayBuffer::UnmapMemory(gl_state_struct& gl_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
@@ -90,18 +111,42 @@ namespace GL {
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
gl_rend_state.bind_array_buffer(0);
|
||||
gl_st.bind_array_buffer(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::WriteMemory(size_t offset, size_t size, const void* data) {
|
||||
void ArrayBuffer::UnmapMemory(p_gl_rend_state& p_gl_rend_st) {
|
||||
if (!buffer)
|
||||
return;
|
||||
|
||||
if (GL_VERSION_4_5)
|
||||
glUnmapNamedBuffer(buffer);
|
||||
else {
|
||||
glUnmapBuffer(GL_ARRAY_BUFFER);
|
||||
p_gl_rend_st.bind_array_buffer(0);
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::WriteMemory(gl_state_struct& gl_st, size_t offset, size_t size, const void* data) {
|
||||
if (!buffer || !size)
|
||||
return;
|
||||
|
||||
if (GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
else {
|
||||
gl_rend_state.bind_array_buffer(buffer);
|
||||
gl_st.bind_array_buffer(buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
}
|
||||
}
|
||||
|
||||
void ArrayBuffer::WriteMemory(p_gl_rend_state& p_gl_rend_st, size_t offset, size_t size, const void* data) {
|
||||
if (!buffer || !size)
|
||||
return;
|
||||
|
||||
if (GL_VERSION_4_5)
|
||||
glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
else {
|
||||
p_gl_rend_st.bind_array_buffer(buffer);
|
||||
glBufferSubData(GL_ARRAY_BUFFER, (GLsizeiptr)offset, (GLsizeiptr)size, data);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user