glMapBuffer/glGetBufferSubData not core ES, use glMapBufferRange.

Mesh viewer for ES now working.
This commit is contained in:
Michael Rennie
2017-03-10 18:15:30 +00:00
committed by Baldur Karlsson
parent 5e2717daec
commit e6d2f1b7a6
+22 -2
View File
@@ -318,16 +318,30 @@ void APIENTRY _glGetNamedBufferParameterivEXT(GLuint buffer, GLenum pname, GLint
internalGL->glGetBufferParameteriv(eGL_COPY_READ_BUFFER, pname, params);
}
void APIENTRY _glGetBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, void *data)
{
void *bufData = internalGL->glMapBufferRange(target, offset, size, eGL_MAP_READ_BIT);
if(!bufData)
{
RDCERR("glMapBufferRange failed to map buffer.");
return;
}
memcpy(data, bufData, (size_t)size);
internalGL->glUnmapBuffer(target);
}
void APIENTRY _glGetNamedBufferSubDataEXT(GLuint buffer, GLintptr offset, GLsizeiptr size, void *data)
{
PushPopBuffer(eGL_COPY_READ_BUFFER, buffer);
internalGL->glGetBufferSubData(eGL_COPY_READ_BUFFER, offset, size, data);
_glGetBufferSubData(eGL_COPY_READ_BUFFER, offset, size, data);
}
void *APIENTRY _glMapNamedBufferEXT(GLuint buffer, GLenum access)
{
PushPopBuffer(eGL_COPY_READ_BUFFER, buffer);
return internalGL->glMapBuffer(eGL_COPY_READ_BUFFER, access);
GLint size;
internalGL->glGetBufferParameteriv(eGL_COPY_READ_BUFFER, eGL_BUFFER_SIZE, &size);
return internalGL->glMapBufferRange(eGL_COPY_READ_BUFFER, 0, size, eGL_MAP_READ_BIT);
}
void *APIENTRY _glMapNamedBufferRangeEXT(GLuint buffer, GLintptr offset, GLsizeiptr length,
@@ -1235,6 +1249,12 @@ void EmulateRequiredExtensions(const GLHookSet *real, GLHookSet *hooks)
EMULATE_FUNC(glGetInternalformativ);
}
// APIs that are not available at all in GLES.
if(IsGLES)
{
EMULATE_FUNC(glGetBufferSubData);
}
// Emulate the EXT_dsa functions that we'll need.
// Note that many functions are omitted from here, even if we support capturing them. The reason
// being we only need to emulate functions that we'll use ourselves either to simplify