Added MapBufferRange
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user