Added MapBufferRange

This commit is contained in:
korenkonder
2023-12-21 11:03:22 +03:00
parent 005f296692
commit aab75ee364
6 changed files with 105 additions and 0 deletions
+24
View File
@@ -104,6 +104,30 @@ public:
return 0;
}
inline void* MapMemory(size_t offset, size_t length) {
if (!buffer)
return 0;
void* data;
if (GL_VERSION_4_5)
data = glMapNamedBufferRange(buffer, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
else {
gl_state_bind_array_buffer(buffer);
data = glMapBufferRange(GL_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
}
if (data)
return data;
if (GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ARRAY_BUFFER);
gl_state_bind_array_buffer(0);
}
return 0;
}
inline bool NotNull() {
return !!buffer;
}
+24
View File
@@ -100,6 +100,30 @@ public:
return 0;
}
inline void* MapMemory(size_t offset, size_t length) {
if (!buffer)
return 0;
void* data;
if (GL_VERSION_4_5)
data = glMapNamedBufferRange(buffer, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
else {
gl_state_bind_element_array_buffer(buffer);
data = glMapBufferRange(GL_ELEMENT_ARRAY_BUFFER, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
}
if (data)
return data;
if (GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER);
gl_state_bind_element_array_buffer(0);
}
return 0;
}
inline bool NotNull() {
return !!buffer;
}
+24
View File
@@ -100,6 +100,30 @@ public:
return 0;
}
inline void* MapMemory(size_t offset, size_t length) {
if (!buffer)
return 0;
void* data;
if (GL_VERSION_4_5)
data = glMapNamedBufferRange(buffer, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
else {
gl_state_bind_shader_storage_buffer(buffer);
data = glMapBufferRange(GL_SHADER_STORAGE_BUFFER, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
}
if (data)
return data;
if (GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);
gl_state_bind_shader_storage_buffer(0);
}
return 0;
}
inline bool NotNull() {
return !!buffer;
}
+24
View File
@@ -100,6 +100,30 @@ public:
return 0;
}
inline void* MapMemory(size_t offset, size_t length) {
if (!buffer)
return 0;
void* data;
if (GL_VERSION_4_5)
data = glMapNamedBufferRange(buffer, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
else {
gl_state_bind_uniform_buffer(buffer);
data = glMapBufferRange(GL_UNIFORM_BUFFER, (GLintptr)offset, (GLsizeiptr)length, GL_WRITE_ONLY);
}
if (data)
return data;
if (GL_VERSION_4_5)
glUnmapNamedBuffer(buffer);
else {
glUnmapBuffer(GL_UNIFORM_BUFFER);
gl_state_bind_uniform_buffer(0);
}
return 0;
}
inline bool NotNull() {
return !!buffer;
}
+8
View File
@@ -2444,6 +2444,7 @@ typedef void (GLAPIENTRY* PFNGLCREATEBUFFERSPROC)(GLsizei n, GLuint* buffers);
typedef void (GLAPIENTRY* PFNGLNAMEDBUFFERSTORAGEPROC)(GLuint buffer, GLsizeiptr size, const void* data, GLbitfield flags);
typedef void (GLAPIENTRY* PFNGLNAMEDBUFFERSUBDATAPROC)(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
typedef void* (GLAPIENTRY* PFNGLMAPNAMEDBUFFERPROC)(GLuint buffer, GLenum access);
typedef void* (GLAPIENTRY* PFNGLMAPNAMEDBUFFERRANGEPROC)(GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access);
typedef GLboolean (GLAPIENTRY* PFNGLUNMAPNAMEDBUFFERPROC)(GLuint buffer);
typedef void (GLAPIENTRY* PFNGLTEXTURESUBIMAGE2DPROC)(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);
@@ -2463,6 +2464,7 @@ static PFNGLCREATEBUFFERSPROC _glCreateBuffers = 0;
static PFNGLNAMEDBUFFERSTORAGEPROC _glNamedBufferStorage = 0;
static PFNGLNAMEDBUFFERSUBDATAPROC _glNamedBufferSubData = 0;
static PFNGLMAPNAMEDBUFFERPROC _glMapNamedBuffer = 0;
static PFNGLMAPNAMEDBUFFERRANGEPROC _glMapNamedBufferRange = 0;
static PFNGLUNMAPNAMEDBUFFERPROC _glUnmapNamedBuffer = 0;
static PFNGLTEXTURESUBIMAGE2DPROC _glTextureSubImage2D = 0;
@@ -2537,6 +2539,12 @@ void* GLAPIENTRY glMapNamedBuffer(GLuint buffer, GLenum access) {
return _glMapNamedBuffer(buffer, access);
}
void* GLAPIENTRY glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length, GLenum access) {
if (!_glMapNamedBufferRange)
_glMapNamedBufferRange = (PFNGLMAPNAMEDBUFFERRANGEPROC)wglGetProcAddressDLL("glMapNamedBufferRange");
return _glMapNamedBufferRange(buffer, offset, length, access);
}
GLboolean GLAPIENTRY glUnmapNamedBuffer(GLuint buffer) {
if (!_glUnmapNamedBuffer)
_glUnmapNamedBuffer = (PFNGLUNMAPNAMEDBUFFERPROC)wglGetProcAddressDLL("glUnmapNamedBuffer");
+1
View File
@@ -3420,6 +3420,7 @@ extern void GLAPIENTRY glCreateBuffers(GLsizei n, GLuint* buffers);
extern void GLAPIENTRY glNamedBufferStorage(GLuint buffer, GLsizeiptr size, const void* data, GLbitfield flags);
extern void GLAPIENTRY glNamedBufferSubData(GLuint buffer, GLintptr offset, GLsizeiptr size, const void* data);
extern void* GLAPIENTRY glMapNamedBuffer(GLuint buffer, GLenum access);
extern void* GLAPIENTRY glMapNamedBufferRange(GLuint buffer, GLintptr offset, GLsizeiptr length, GLenum access);
extern GLboolean GLAPIENTRY glUnmapNamedBuffer(GLuint buffer);
extern void GLAPIENTRY glTextureSubImage2D(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels);