diff --git a/src/FrameBuffer.cpp b/src/FrameBuffer.cpp index 9a0d3ab8..897ec019 100644 --- a/src/FrameBuffer.cpp +++ b/src/FrameBuffer.cpp @@ -935,7 +935,9 @@ void FrameBufferToRDRAM::CopyToRDRAM(u32 _address) #ifndef GLES2 PBOBinder binder(GL_PIXEL_PACK_BUFFER, m_PBO); glReadPixels(0, 0, VI.width, VI.height, GL_RGBA, GL_UNSIGNED_BYTE, 0); - GLubyte* pixelData = (GLubyte*)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + isGLError(); + GLubyte* pixelData = (GLubyte*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, VI.width * VI.height * 4, GL_MAP_READ_BIT); + isGLError(); if(pixelData == NULL) return; #else @@ -1101,7 +1103,7 @@ bool DepthBufferToRDRAM::CopyToRDRAM( u32 _address) { glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO); glReadPixels(0, 0, VI.width, VI.height, GL_DEPTH_COMPONENT, GL_FLOAT, 0); - GLubyte* pixelData = (GLubyte*)glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + GLubyte* pixelData = (GLubyte*)glMapBufferRange(GL_PIXEL_PACK_BUFFER, 0, VI.width * VI.height * 4, GL_MAP_READ_BIT); if(pixelData == NULL) return false; @@ -1197,7 +1199,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha) #ifndef GLES2 PBOBinder binder(GL_PIXEL_UNPACK_BUFFER, m_PBO); glBufferData(GL_PIXEL_UNPACK_BUFFER, dataSize, NULL, GL_DYNAMIC_DRAW); - GLubyte* ptr = (GLubyte*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY); + GLubyte* ptr = (GLubyte*)glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, dataSize, GL_MAP_WRITE_BIT); #else m_PBO = (GLubyte*)malloc(dataSize); GLubyte* ptr = m_PBO; diff --git a/src/GLSLCombiner.cpp b/src/GLSLCombiner.cpp index 14e754fc..7fd483c8 100644 --- a/src/GLSLCombiner.cpp +++ b/src/GLSLCombiner.cpp @@ -135,7 +135,9 @@ void NoiseTexture::update() #ifndef GLES2 PBOBinder binder(GL_PIXEL_UNPACK_BUFFER, m_PBO); glBufferData(GL_PIXEL_UNPACK_BUFFER, dataSize, NULL, GL_DYNAMIC_DRAW); - GLubyte* ptr = (GLubyte*)glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY); + isGLError(); + GLubyte* ptr = (GLubyte*)glMapBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, dataSize, GL_MAP_WRITE_BIT); + isGLError(); #else m_PBO = (GLubyte*)malloc(dataSize); GLubyte* ptr = m_PBO; diff --git a/src/windows/GLFunctions.h b/src/windows/GLFunctions.h index 11bbfd2a..2c6d39e8 100644 --- a/src/windows/GLFunctions.h +++ b/src/windows/GLFunctions.h @@ -52,6 +52,7 @@ extern PFNGLGENBUFFERSPROC glGenBuffers; extern PFNGLBINDBUFFERPROC glBindBuffer; extern PFNGLBUFFERDATAPROC glBufferData; extern PFNGLMAPBUFFERPROC glMapBuffer; +extern PFNGLMAPBUFFERRANGEPROC glMapBufferRange; extern PFNGLUNMAPBUFFERPROC glUnmapBuffer; extern PFNGLDELETEBUFFERSPROC glDeleteBuffers; extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; diff --git a/src/windows/GLFunctions_windows.cpp b/src/windows/GLFunctions_windows.cpp index c8740463..27cca76f 100644 --- a/src/windows/GLFunctions_windows.cpp +++ b/src/windows/GLFunctions_windows.cpp @@ -54,6 +54,7 @@ PFNGLGENBUFFERSPROC glGenBuffers; PFNGLBINDBUFFERPROC glBindBuffer; PFNGLBUFFERDATAPROC glBufferData; PFNGLMAPBUFFERPROC glMapBuffer; +PFNGLMAPBUFFERRANGEPROC glMapBufferRange; PFNGLUNMAPBUFFERPROC glUnmapBuffer; PFNGLDELETEBUFFERSPROC glDeleteBuffers; PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; @@ -120,6 +121,7 @@ void initGLFunctions() glBindBuffer = (PFNGLBINDBUFFERPROC)wglGetProcAddress( "glBindBuffer" ); glBufferData = (PFNGLBUFFERDATAPROC)wglGetProcAddress( "glBufferData" ); glMapBuffer = (PFNGLMAPBUFFERPROC)wglGetProcAddress( "glMapBuffer" ); + glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)wglGetProcAddress("glMapBufferRange"); glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)wglGetProcAddress( "glUnmapBuffer" ); glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)wglGetProcAddress( "glDeleteBuffers" ); glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)wglGetProcAddress( "glBindImageTexture" );