1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-07 03:13:49 +00:00

Remove FrameBufferExt functions usage.

This commit is contained in:
Sergey Lipskiy 2014-03-21 16:38:39 +07:00
parent a3d740ff23
commit 2708b2abeb
5 changed files with 83 additions and 353 deletions

View File

@ -30,7 +30,7 @@ void DepthBuffer_RemoveBottom()
depthBuffer.top = NULL; depthBuffer.top = NULL;
if (depthBuffer.bottom->renderbuf != 0) if (depthBuffer.bottom->renderbuf != 0)
ogl_glDeleteRenderbuffers(1, &depthBuffer.bottom->renderbuf); glDeleteRenderbuffers(1, &depthBuffer.bottom->renderbuf);
if (depthBuffer.bottom->depth_texture != NULL) if (depthBuffer.bottom->depth_texture != NULL)
TextureCache_Remove( depthBuffer.bottom->depth_texture ); TextureCache_Remove( depthBuffer.bottom->depth_texture );
free( depthBuffer.bottom ); free( depthBuffer.bottom );
@ -72,9 +72,9 @@ void DepthBuffer_Remove( DepthBuffer *buffer )
} }
if (buffer->renderbuf != 0) if (buffer->renderbuf != 0)
ogl_glDeleteRenderbuffers(1, &buffer->renderbuf); glDeleteRenderbuffers(1, &buffer->renderbuf);
if (buffer->fbo != 0) if (buffer->fbo != 0)
ogl_glDeleteFramebuffers(1, &buffer->fbo); glDeleteFramebuffers(1, &buffer->fbo);
if (buffer->depth_texture != NULL) if (buffer->depth_texture != NULL)
TextureCache_Remove( buffer->depth_texture ); TextureCache_Remove( buffer->depth_texture );
free( buffer ); free( buffer );
@ -180,12 +180,12 @@ void DepthBuffer_SetBuffer( u32 address )
current->width = pFrameBuffer != NULL ? pFrameBuffer->width : VI.width; current->width = pFrameBuffer != NULL ? pFrameBuffer->width : VI.width;
current->depth_texture = NULL; current->depth_texture = NULL;
if (OGL.frameBufferTextures) { if (OGL.frameBufferTextures) {
ogl_glGenRenderbuffers(1, &current->renderbuf); glGenRenderbuffers(1, &current->renderbuf);
ogl_glBindRenderbuffer(GL_RENDERBUFFER, current->renderbuf); glBindRenderbuffer(GL_RENDERBUFFER, current->renderbuf);
if (pFrameBuffer != NULL) if (pFrameBuffer != NULL)
ogl_glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, pFrameBuffer->texture->realWidth, pFrameBuffer->texture->realHeight); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, pFrameBuffer->texture->realWidth, pFrameBuffer->texture->realHeight);
else else
ogl_glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, (u32)pow2(OGL.width), (u32)pow2(OGL.height)); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, (u32)pow2(OGL.width), (u32)pow2(OGL.height));
} }
} }
@ -224,8 +224,8 @@ void DepthBuffer_ClearBuffer() {
return; return;
float color[4] = {1.0f, 1.0f, 0.0f, 0.0f}; float color[4] = {1.0f, 1.0f, 0.0f, 0.0f};
glBindImageTexture(depthImageUnit, 0, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); glBindImageTexture(depthImageUnit, 0, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
OGL_DrawRect(0,0,VI.width, VI.height, color); OGL_DrawRect(0,0,VI.width, VI.height, color);
glBindImageTexture(depthImageUnit, current->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); glBindImageTexture(depthImageUnit, current->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
} }

View File

@ -143,7 +143,7 @@ void FrameBuffer_RemoveBottom()
TextureCache_Remove( frameBuffer.bottom->texture ); TextureCache_Remove( frameBuffer.bottom->texture );
if (frameBuffer.bottom->fbo != 0) if (frameBuffer.bottom->fbo != 0)
ogl_glDeleteFramebuffers(1, &frameBuffer.bottom->fbo); glDeleteFramebuffers(1, &frameBuffer.bottom->fbo);
if (frameBuffer.bottom == frameBuffer.top) if (frameBuffer.bottom == frameBuffer.top)
frameBuffer.top = NULL; frameBuffer.top = NULL;
@ -189,7 +189,7 @@ void FrameBuffer_Remove( FrameBuffer *buffer )
if (buffer->texture != NULL) if (buffer->texture != NULL)
TextureCache_Remove( buffer->texture ); TextureCache_Remove( buffer->texture );
if (buffer->fbo != 0) if (buffer->fbo != 0)
ogl_glDeleteFramebuffers(1, &buffer->fbo); glDeleteFramebuffers(1, &buffer->fbo);
free( buffer ); free( buffer );
@ -295,7 +295,7 @@ void FrameBuffer_SaveBuffer( u32 address, u16 format, u16 size, u16 width, u16 h
current = NULL; current = NULL;
} else { } else {
FrameBuffer_MoveToTop( current ); FrameBuffer_MoveToTop( current );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
if (current->size != size) { if (current->size != size) {
f32 fillColor[4]; f32 fillColor[4];
gDPGetFillColor(fillColor); gDPGetFillColor(fillColor);
@ -346,10 +346,10 @@ void FrameBuffer_SaveBuffer( u32 address, u16 format, u16 size, u16 width, u16 h
glTexImage2D(GL_TEXTURE_2D, 0, monohromeInternalformat, current->texture->realWidth, current->texture->realHeight, 0, monohromeformat, GL_UNSIGNED_BYTE, NULL); glTexImage2D(GL_TEXTURE_2D, 0, monohromeInternalformat, current->texture->realWidth, current->texture->realHeight, 0, monohromeformat, GL_UNSIGNED_BYTE, NULL);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glGenFramebuffers(1, &current->fbo); glGenFramebuffers(1, &current->fbo);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
ogl_glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, current->texture->glName, 0); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, current->texture->glName, 0);
} }
FrameBuffer_AttachDepthBuffer(); FrameBuffer_AttachDepthBuffer();
@ -399,12 +399,12 @@ void _initDepthTexture()
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture( GL_TEXTURE_2D, 0); glBindTexture( GL_TEXTURE_2D, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glGenFramebuffers(1, &depthBuffer.top->fbo); glGenFramebuffers(1, &depthBuffer.top->fbo);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, depthBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, depthBuffer.top->fbo);
ogl_glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, depthBuffer.top->depth_texture->glName, 0); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, depthBuffer.top->depth_texture->glName, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
frameBuffer.top->pDepthBuffer = depthBuffer.top; frameBuffer.top->pDepthBuffer = depthBuffer.top;
DepthBuffer_ClearBuffer(); DepthBuffer_ClearBuffer();
#endif // GLES2 #endif // GLES2
@ -416,15 +416,15 @@ void FrameBuffer_AttachDepthBuffer()
if (depthBuffer.top->depth_texture == NULL) if (depthBuffer.top->depth_texture == NULL)
_initDepthTexture(); _initDepthTexture();
frameBuffer.top->pDepthBuffer = depthBuffer.top; frameBuffer.top->pDepthBuffer = depthBuffer.top;
ogl_glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer.top->renderbuf); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer.top->renderbuf);
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT }; GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT };
ogl_glDrawBuffers(2, attachments, frameBuffer.top->texture->glName); glDrawBuffers(2, attachments);
glBindImageTexture(depthImageUnit, depthBuffer.top->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); glBindImageTexture(depthImageUnit, depthBuffer.top->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);
assert(checkFBO()); assert(checkFBO());
} else if (frameBuffer.top != NULL) { } else if (frameBuffer.top != NULL) {
frameBuffer.top->pDepthBuffer = 0; frameBuffer.top->pDepthBuffer = 0;
GLuint attachments[1] = { GL_COLOR_ATTACHMENT0 }; GLuint attachments[1] = { GL_COLOR_ATTACHMENT0 };
ogl_glDrawBuffers(1, attachments, frameBuffer.top->texture->glName); glDrawBuffers(1, attachments);
assert(checkFBO()); assert(checkFBO());
} }
Combiner_UpdateCombineDepthInfo(); Combiner_UpdateCombineDepthInfo();
@ -456,12 +456,12 @@ void FrameBuffer_RenderBuffer( u32 address )
dstY1 -= partHeight; dstY1 -= partHeight;
} }
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
//glDrawBuffer( GL_BACK ); //glDrawBuffer( GL_BACK );
float clearColor[4] = {0.0f, 0.0f, 0.0f, 0.0f}; float clearColor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
OGL_ClearColorBuffer(clearColor); OGL_ClearColorBuffer(clearColor);
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, (GLint)(srcY0*OGL.scaleY), OGL.width, (GLint)(srcY1*OGL.scaleY), 0, (GLint)(srcY0*OGL.scaleY), OGL.width, (GLint)(srcY1*OGL.scaleY),
0, OGL.heightOffset + (GLint)(dstY0*viScaleY), OGL.width, OGL.heightOffset + (GLint)(dstY1*viScaleY), 0, OGL.heightOffset + (GLint)(dstY0*viScaleY), OGL.width, OGL.heightOffset + (GLint)(dstY1*viScaleY),
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
@ -474,16 +474,16 @@ void FrameBuffer_RenderBuffer( u32 address )
srcY1 = partHeight; srcY1 = partHeight;
dstY0 = dstY1; dstY0 = dstY1;
dstY1 = dstY0 + partHeight; dstY1 = dstY0 + partHeight;
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo);
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, (GLint)(srcY0*OGL.scaleY), OGL.width, (GLint)(srcY1*OGL.scaleY), 0, (GLint)(srcY0*OGL.scaleY), OGL.width, (GLint)(srcY1*OGL.scaleY),
0, OGL.heightOffset + (GLint)(dstY0*viScaleY), OGL.width, OGL.heightOffset + (GLint)(dstY1*viScaleY), 0, OGL.heightOffset + (GLint)(dstY0*viScaleY), OGL.width, OGL.heightOffset + (GLint)(dstY1*viScaleY),
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
); );
} }
} }
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
OGL_SwapBuffers(); OGL_SwapBuffers();
} }
#else #else
@ -499,15 +499,15 @@ void FrameBuffer_RenderBuffer( u32 address )
{ {
/* /*
float fill_color[4] = {1.0f, 0.0f, 0.0f, 1.0f}; float fill_color[4] = {1.0f, 0.0f, 0.0f, 1.0f};
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
ogl_glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer.top->renderbuf); glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer.top->renderbuf);
ogl_glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer.top->renderbuf); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer.top->renderbuf);
GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT }; GLuint attachments[2] = { GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT };
ogl_glDrawBuffers(2, attachments, current->texture->glName); glDrawBuffers(2, attachments, current->texture->glName);
assert(checkFBO()); assert(checkFBO());
OGL_ClearDepthBuffer(); OGL_ClearDepthBuffer();
OGL_ClearColorBuffer(fill_color); OGL_ClearColorBuffer(fill_color);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
*/ */
glPushAttrib( GL_ENABLE_BIT | GL_VIEWPORT_BIT ); glPushAttrib( GL_ENABLE_BIT | GL_VIEWPORT_BIT );
@ -535,7 +535,7 @@ void FrameBuffer_RenderBuffer( u32 address )
u1 = (float)current->texture->width / (float)current->texture->realWidth; u1 = (float)current->texture->width / (float)current->texture->realWidth;
v1 = (float)current->texture->height / (float)current->texture->realHeight; v1 = (float)current->texture->height / (float)current->texture->realHeight;
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDrawBuffer( GL_FRONT ); glDrawBuffer( GL_FRONT );
glBegin(GL_QUADS); glBegin(GL_QUADS);
glTexCoord2f( 0.0f, 0.0f ); glTexCoord2f( 0.0f, 0.0f );
@ -551,7 +551,7 @@ void FrameBuffer_RenderBuffer( u32 address )
glVertex2f( current->texture->width, (GLfloat)(OGL.height - current->texture->height) ); glVertex2f( current->texture->width, (GLfloat)(OGL.height - current->texture->height) );
glEnd(); glEnd();
glDrawBuffer( GL_BACK ); glDrawBuffer( GL_BACK );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
#ifdef DEBUG #ifdef DEBUG
DebugMsg( DEBUG_HIGH | DEBUG_HANDLED, "FrameBuffer_RenderBuffer( 0x%08X ); \n", address); DebugMsg( DEBUG_HIGH | DEBUG_HANDLED, "FrameBuffer_RenderBuffer( 0x%08X ); \n", address);
#endif #endif
@ -642,9 +642,9 @@ void FrameBuffer_ActivateBufferTextureBG( s16 t, FrameBuffer *buffer )
void FrameBufferToRDRAM::Init() void FrameBufferToRDRAM::Init()
{ {
// generate a framebuffer // generate a framebuffer
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glGenFramebuffers(1, &m_FBO); glGenFramebuffers(1, &m_FBO);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
m_pTexture = TextureCache_AddTop(); m_pTexture = TextureCache_AddTop();
m_pTexture->format = G_IM_FMT_RGBA; m_pTexture->format = G_IM_FMT_RGBA;
@ -665,10 +665,10 @@ void FrameBufferToRDRAM::Init()
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
ogl_glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_pTexture->glName, 0); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_pTexture->glName, 0);
// check if everything is OK // check if everything is OK
assert(checkFBO()); assert(checkFBO());
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
#ifndef GLES2 #ifndef GLES2
// Generate and initialize Pixel Buffer Objects // Generate and initialize Pixel Buffer Objects
@ -682,8 +682,8 @@ void FrameBufferToRDRAM::Init()
} }
void FrameBufferToRDRAM::Destroy() { void FrameBufferToRDRAM::Destroy() {
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glDeleteFramebuffers(1, &m_FBO); glDeleteFramebuffers(1, &m_FBO);
m_FBO = 0; m_FBO = 0;
TextureCache_Remove( m_pTexture ); TextureCache_Remove( m_pTexture );
m_pTexture = NULL; m_pTexture = NULL;
@ -699,19 +699,19 @@ void FrameBufferToRDRAM::CopyToRDRAM( u32 address, bool bSync ) {
return; return;
address = current->startAddress; address = current->startAddress;
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, current->fbo);
glReadBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
GLuint attachment = GL_COLOR_ATTACHMENT0; GLuint attachment = GL_COLOR_ATTACHMENT0;
glDrawBuffers(1, &attachment); glDrawBuffers(1, &attachment);
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, 0, OGL.width, OGL.height, 0, 0, OGL.width, OGL.height,
0, 0, current->width, current->height, 0, 0, current->width, current->height,
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
); );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO);
glReadBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0);
#ifndef GLES2 #ifndef GLES2
// If Sync, read pixels from the buffer, copy them to RDRAM. // If Sync, read pixels from the buffer, copy them to RDRAM.
@ -765,7 +765,7 @@ void FrameBufferToRDRAM::CopyToRDRAM( u32 address, bool bSync ) {
#else #else
free(pixelData); free(pixelData);
#endif #endif
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
} }
void FrameBuffer_CopyToRDRAM( u32 address, bool bSync ) void FrameBuffer_CopyToRDRAM( u32 address, bool bSync )
@ -777,9 +777,9 @@ void FrameBuffer_CopyToRDRAM( u32 address, bool bSync )
void DepthBufferToRDRAM::Init() void DepthBufferToRDRAM::Init()
{ {
// generate a framebuffer // generate a framebuffer
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glGenFramebuffers(1, &m_FBO); glGenFramebuffers(1, &m_FBO);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
m_pTexture = TextureCache_AddTop(); m_pTexture = TextureCache_AddTop();
m_pTexture->format = G_IM_FMT_IA; m_pTexture->format = G_IM_FMT_IA;
@ -800,10 +800,10 @@ void DepthBufferToRDRAM::Init()
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
ogl_glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_pTexture->glName, 0); glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_pTexture->glName, 0);
// check if everything is OK // check if everything is OK
assert(checkFBO()); assert(checkFBO());
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
// Generate and initialize Pixel Buffer Objects // Generate and initialize Pixel Buffer Objects
glGenBuffers(2, m_aPBO); glGenBuffers(2, m_aPBO);
@ -815,8 +815,8 @@ void DepthBufferToRDRAM::Init()
} }
void DepthBufferToRDRAM::Destroy() { void DepthBufferToRDRAM::Destroy() {
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
ogl_glDeleteFramebuffers(1, &m_FBO); glDeleteFramebuffers(1, &m_FBO);
m_FBO = 0; m_FBO = 0;
TextureCache_Remove( m_pTexture ); TextureCache_Remove( m_pTexture );
m_pTexture = NULL; m_pTexture = NULL;
@ -831,23 +831,23 @@ void DepthBufferToRDRAM::CopyToRDRAM( u32 address) {
DepthBuffer * pDepthBuffer = current->pDepthBuffer; DepthBuffer * pDepthBuffer = current->pDepthBuffer;
address = pDepthBuffer->address; address = pDepthBuffer->address;
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, pDepthBuffer->fbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, pDepthBuffer->fbo);
glReadBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_FBO);
GLuint attachment = GL_COLOR_ATTACHMENT0; GLuint attachment = GL_COLOR_ATTACHMENT0;
glDrawBuffers(1, &attachment); glDrawBuffers(1, &attachment);
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, 0, OGL.width, OGL.height, 0, 0, OGL.width, OGL.height,
0, 0, current->width, current->height, 0, 0, current->width, current->height,
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
); );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
m_curIndex = (m_curIndex + 1) % 2; m_curIndex = (m_curIndex + 1) % 2;
const u32 nextIndex = m_aAddress[m_curIndex] == 0 ? m_curIndex : (m_curIndex + 1) % 2; const u32 nextIndex = m_aAddress[m_curIndex] == 0 ? m_curIndex : (m_curIndex + 1) % 2;
m_aAddress[m_curIndex] = address; m_aAddress[m_curIndex] = address;
glBindBuffer(GL_PIXEL_PACK_BUFFER, m_aPBO[m_curIndex]); glBindBuffer(GL_PIXEL_PACK_BUFFER, m_aPBO[m_curIndex]);
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO);
glReadBuffer(GL_COLOR_ATTACHMENT0); glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels( 0, 0, VI.width, VI.height, GL_RED, GL_UNSIGNED_SHORT, 0 ); glReadPixels( 0, 0, VI.width, VI.height, GL_RED, GL_UNSIGNED_SHORT, 0 );
@ -871,7 +871,7 @@ void DepthBufferToRDRAM::CopyToRDRAM( u32 address) {
glUnmapBuffer(GL_PIXEL_PACK_BUFFER); glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
} }
#endif // GLES2 #endif // GLES2
@ -1004,18 +1004,18 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
#if 0 #if 0
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO); glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FBO);
const GLuint attachment = GL_COLOR_ATTACHMENT0; const GLuint attachment = GL_COLOR_ATTACHMENT0;
glReadBuffer(attachment); glReadBuffer(attachment);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
glDrawBuffers(1, &attachment); glDrawBuffers(1, &attachment);
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, 0, width, height, 0, 0, width, height,
0, 0, OGL.width, OGL.height, 0, 0, OGL.width, OGL.height,
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
); );
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
#else #else
GLfloat u1, v1, x1, y1; GLfloat u1, v1, x1, y1;
u1 = (GLfloat)width / (GLfloat)m_pTexture->realWidth; u1 = (GLfloat)width / (GLfloat)m_pTexture->realWidth;
@ -1050,7 +1050,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
glViewport( 0, 0, x1, y1 ); glViewport( 0, 0, x1, y1 );
glDisable( GL_SCISSOR_TEST ); glDisable( GL_SCISSOR_TEST );
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current->fbo);
const GLuint attachment = GL_COLOR_ATTACHMENT0; const GLuint attachment = GL_COLOR_ATTACHMENT0;
glDrawBuffers(1, &attachment); glDrawBuffers(1, &attachment);
glBegin(GL_QUADS); glBegin(GL_QUADS);
@ -1066,7 +1066,7 @@ void RDRAMtoFrameBuffer::CopyFromRDRAM( u32 _address, bool _bUseAlpha)
glTexCoord2f( u1, 0.0f ); glTexCoord2f( u1, 0.0f );
glVertex2f( x1, 0.0f ); glVertex2f( x1, 0.0f );
glEnd(); glEnd();
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
glBindTexture(GL_TEXTURE_2D, 0); glBindTexture(GL_TEXTURE_2D, 0);
glLoadIdentity(); glLoadIdentity();

View File

@ -207,7 +207,7 @@ void InitGLSLCombiner()
} }
void DestroyGLSLCombiner() { void DestroyGLSLCombiner() {
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
DestroyZlutTexture(); DestroyZlutTexture();
DestroyShadowMapShader(); DestroyShadowMapShader();
} }
@ -692,17 +692,17 @@ void GLSL_RenderDepth() {
if (!OGL.bImageTexture) if (!OGL.bImageTexture)
return; return;
#if 0 #if 0
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, g_zbuf_fbo); glBindFramebuffer(GL_READ_FRAMEBUFFER, g_zbuf_fbo);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glDrawBuffer( GL_FRONT ); glDrawBuffer( GL_FRONT );
ogl_glBlitFramebuffer( glBlitFramebuffer(
0, 0, OGL.width, OGL.height, 0, 0, OGL.width, OGL.height,
0, OGL.heightOffset, OGL.width, OGL.heightOffset + OGL.height, 0, OGL.heightOffset, OGL.width, OGL.heightOffset + OGL.height,
GL_COLOR_BUFFER_BIT, GL_LINEAR GL_COLOR_BUFFER_BIT, GL_LINEAR
); );
glDrawBuffer( GL_BACK ); glDrawBuffer( GL_BACK );
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top != NULL ? frameBuffer.top->fbo : 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top != NULL ? frameBuffer.top->fbo : 0);
#else #else
if (frameBuffer.top == NULL || frameBuffer.top->pDepthBuffer == NULL) if (frameBuffer.top == NULL || frameBuffer.top->pDepthBuffer == NULL)
return; return;
@ -733,7 +733,7 @@ void GLSL_RenderDepth() {
u1 = 1.0; u1 = 1.0;
v1 = 1.0; v1 = 1.0;
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
#ifdef _WINDOWS #ifdef _WINDOWS
glDrawBuffer( GL_FRONT ); glDrawBuffer( GL_FRONT );
#else #else
@ -757,7 +757,7 @@ void GLSL_RenderDepth() {
#else #else
OGL_SwapBuffers(); OGL_SwapBuffers();
#endif #endif
ogl_glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, frameBuffer.top->fbo);
glBindImageTexture(depthImageUnit, frameBuffer.top->pDepthBuffer->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F); glBindImageTexture(depthImageUnit, frameBuffer.top->pDepthBuffer->depth_texture->glName, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGBA32F);

View File

@ -76,18 +76,6 @@ PFNGLDELETEBUFFERSPROC glDeleteBuffers;
PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
PFNGLMEMORYBARRIERPROC glMemoryBarrier; PFNGLMEMORYBARRIERPROC glMemoryBarrier;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT;
#endif // _WINDOWS #endif // _WINDOWS
BOOL isExtensionSupported( const char *extension ) BOOL isExtensionSupported( const char *extension )
@ -182,24 +170,10 @@ void OGL_InitExtensions()
glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)wglGetProcAddress( "glBindImageTexture" ); glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)wglGetProcAddress( "glBindImageTexture" );
glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)wglGetProcAddress( "glMemoryBarrier" ); glMemoryBarrier = (PFNGLMEMORYBARRIERPROC)wglGetProcAddress( "glMemoryBarrier" );
glBindFramebufferEXT = (PFNGLBINDFRAMEBUFFEREXTPROC)wglGetProcAddress("glBindFramebufferEXT");
glFramebufferTexture2DEXT = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC)wglGetProcAddress("glFramebufferTexture2DEXT");
glGenFramebuffersEXT = (PFNGLGENFRAMEBUFFERSEXTPROC)wglGetProcAddress("glGenFramebuffersEXT");
glCheckFramebufferStatusEXT = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC)wglGetProcAddress("glCheckFramebufferStatusEXT");
glDeleteFramebuffersEXT = (PFNGLDELETEFRAMEBUFFERSEXTPROC)wglGetProcAddress("glDeleteFramebuffersEXT");
glBindRenderbufferEXT = (PFNGLBINDRENDERBUFFEREXTPROC)wglGetProcAddress("glBindRenderbufferEXT");
glDeleteRenderbuffersEXT = (PFNGLDELETERENDERBUFFERSEXTPROC)wglGetProcAddress("glDeleteRenderbuffersEXT");
glGenRenderbuffersEXT = (PFNGLGENRENDERBUFFERSEXTPROC)wglGetProcAddress("glGenRenderbuffersEXT");
glRenderbufferStorageEXT = (PFNGLRENDERBUFFERSTORAGEEXTPROC)wglGetProcAddress("glRenderbufferStorageEXT");
glFramebufferRenderbufferEXT = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC)wglGetProcAddress("glFramebufferRenderbufferEXT");
glBlitFramebufferEXT = (PFNGLBLITFRAMEBUFFEREXTPROC)wglGetProcAddress("glBlitFramebufferEXT");
#endif // _WINDOWS #endif // _WINDOWS
if (glGenFramebuffers != NULL) if (glGenFramebuffers != NULL)
OGL.framebufferMode = GLInfo::fbFBO; OGL.framebufferMode = GLInfo::fbFBO;
else if (glBindFramebufferEXT != NULL)
OGL.framebufferMode = GLInfo::fbFBOEXT;
else else
OGL.framebufferMode = GLInfo::fbNone; OGL.framebufferMode = GLInfo::fbNone;
@ -1119,7 +1093,7 @@ void OGL_SaveScreenshot()
GLint oldMode; GLint oldMode;
glGetIntegerv( GL_READ_BUFFER, &oldMode ); glGetIntegerv( GL_READ_BUFFER, &oldMode );
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glReadBuffer( GL_FRONT ); glReadBuffer( GL_FRONT );
glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixelData ); glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixelData );
glReadBuffer( oldMode ); glReadBuffer( oldMode );
@ -1214,217 +1188,8 @@ void OGL_SwapBuffers()
#endif // _WINDOWS #endif // _WINDOWS
} }
void ogl_glGenFramebuffers (GLsizei n, GLuint *framebuffers) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glGenFramebuffers(n, framebuffers);
break;
case GLInfo::fbFBOEXT:
glGenFramebuffersEXT(n, framebuffers);
break;
}
}
void ogl_glBindFramebuffer (GLenum target, GLuint framebuffer) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glBindFramebuffer(target, framebuffer);
break;
case GLInfo::fbFBOEXT:
switch (target) {
case GL_DRAW_FRAMEBUFFER:
target = GL_FRAMEBUFFER_EXT;
break;
case GL_READ_FRAMEBUFFER:
target = GL_READ_FRAMEBUFFER_EXT;
break;
}
glBindFramebufferEXT(target, framebuffer);
break;
}
}
void ogl_glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glDeleteFramebuffers(n, framebuffers);
break;
case GLInfo::fbFBOEXT:
glDeleteFramebuffersEXT(n, framebuffers);
break;
}
}
void ogl_glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glFramebufferTexture(target, attachment, texture, level);
break;
case GLInfo::fbFBOEXT:
switch (target) {
case GL_DRAW_FRAMEBUFFER:
target = GL_FRAMEBUFFER_EXT;
break;
}
switch (attachment) {
case GL_COLOR_ATTACHMENT0:
attachment = GL_COLOR_ATTACHMENT0_EXT;
break;
case GL_COLOR_ATTACHMENT1:
attachment = GL_COLOR_ATTACHMENT1_EXT;
break;
case GL_COLOR_ATTACHMENT2:
attachment = GL_COLOR_ATTACHMENT2_EXT;
break;
case GL_COLOR_ATTACHMENT3:
attachment = GL_COLOR_ATTACHMENT3_EXT;
break;
}
glFramebufferTexture2DEXT(target, attachment, GL_TEXTURE_2D, texture, level);
break;
}
}
void ogl_glGenRenderbuffers (GLsizei n, GLuint *renderbuffers) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glGenRenderbuffers(n, renderbuffers);
break;
case GLInfo::fbFBOEXT:
glGenRenderbuffersEXT(n, renderbuffers);
break;
}
}
void ogl_glBindRenderbuffer (GLenum target, GLuint renderbuffer) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glBindRenderbuffer(target, renderbuffer);
break;
case GLInfo::fbFBOEXT:
switch (target) {
case GL_RENDERBUFFER:
target = GL_RENDERBUFFER_EXT;
break;
}
glBindRenderbufferEXT(target, renderbuffer);
break;
}
}
void ogl_glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glRenderbufferStorage(target, internalformat, width, height);
break;
case GLInfo::fbFBOEXT:
switch (target) {
case GL_RENDERBUFFER:
target = GL_RENDERBUFFER_EXT;
break;
}
glRenderbufferStorageEXT(target, internalformat, width, height);
break;
}
}
void ogl_glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glDeleteRenderbuffers(n, renderbuffers);
break;
case GLInfo::fbFBOEXT:
glDeleteRenderbuffersEXT(n, renderbuffers);
break;
}
}
void ogl_glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer);
break;
case GLInfo::fbFBOEXT:
switch (target) {
case GL_DRAW_FRAMEBUFFER:
target = GL_FRAMEBUFFER_EXT;
break;
}
switch (attachment) {
case GL_COLOR_ATTACHMENT0:
attachment = GL_COLOR_ATTACHMENT0_EXT;
break;
case GL_COLOR_ATTACHMENT1:
attachment = GL_COLOR_ATTACHMENT1_EXT;
break;
case GL_COLOR_ATTACHMENT2:
attachment = GL_COLOR_ATTACHMENT2_EXT;
break;
case GL_COLOR_ATTACHMENT3:
attachment = GL_COLOR_ATTACHMENT3_EXT;
break;
case GL_DEPTH_ATTACHMENT:
attachment = GL_DEPTH_ATTACHMENT_EXT;
break;
}
switch (renderbuffertarget) {
case GL_RENDERBUFFER:
target = GL_RENDERBUFFER_EXT;
break;
}
glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);
break;
}
}
void ogl_glDrawBuffers (GLsizei n, const GLenum *bufs, GLuint texture) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glDrawBuffers(n, bufs);
break;
case GLInfo::fbFBOEXT:
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, texture, 0);
break;
}
assert(checkFBO());
}
GLenum ogl_glCheckFramebufferStatus (GLenum target) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
return glCheckFramebufferStatus(target);
case GLInfo::fbFBOEXT:
switch (target) {
case GL_DRAW_FRAMEBUFFER:
target = GL_FRAMEBUFFER_EXT;
break;
}
switch (glCheckFramebufferStatusEXT(target)) {
case GL_FRAMEBUFFER_COMPLETE_EXT:
return GL_FRAMEBUFFER_COMPLETE;
case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
return GL_FRAMEBUFFER_UNSUPPORTED;
case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT;
case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT;
case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT;
case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT;
case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER;
case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
return GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER;
case GL_FRAMEBUFFER_BINDING_EXT:
return GL_FRAMEBUFFER_BINDING;
}
}
return GL_FRAMEBUFFER_UNSUPPORTED;
}
bool checkFBO() { bool checkFBO() {
GLenum e = ogl_glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER); GLenum e = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
switch (e) { switch (e) {
case GL_FRAMEBUFFER_UNDEFINED: case GL_FRAMEBUFFER_UNDEFINED:
printf("FBO Undefined\n"); printf("FBO Undefined\n");
@ -1455,14 +1220,3 @@ bool checkFBO() {
} }
return e == GL_FRAMEBUFFER_COMPLETE; return e == GL_FRAMEBUFFER_COMPLETE;
} }
void ogl_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter) {
switch (OGL.framebufferMode) {
case GLInfo::fbFBO:
glBlitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
break;
case GLInfo::fbFBOEXT:
glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);
break;
}
}

View File

@ -76,8 +76,7 @@ struct GLInfo
BYTE combiner; BYTE combiner;
enum { enum {
fbNone, fbNone,
fbFBO, fbFBO
fbFBOEXT
} framebufferMode; } framebufferMode;
enum { enum {
rsNone = 0, rsNone = 0,
@ -116,18 +115,6 @@ void OGL_SaveScreenshot();
void OGL_SwapBuffers(); void OGL_SwapBuffers();
void OGL_ReadScreen( void **dest, long *width, long *height ); void OGL_ReadScreen( void **dest, long *width, long *height );
void ogl_glGenFramebuffers (GLsizei n, GLuint *framebuffers);
void ogl_glBindFramebuffer (GLenum target, GLuint framebuffer);
void ogl_glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers);
void ogl_glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level);
void ogl_glGenRenderbuffers (GLsizei n, GLuint *renderbuffers);
void ogl_glBindRenderbuffer (GLenum target, GLuint renderbuffer);
void ogl_glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);
void ogl_glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers);
void ogl_glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);
void ogl_glDrawBuffers (GLsizei n, const GLenum *bufs, GLuint texture);
GLenum ogl_glCheckFramebufferStatus (GLenum target);
void ogl_glBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
bool checkFBO(); bool checkFBO();
#ifdef _WINDOWS #ifdef _WINDOWS
@ -182,16 +169,5 @@ extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture; extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
extern PFNGLMEMORYBARRIERPROC glMemoryBarrier; extern PFNGLMEMORYBARRIERPROC glMemoryBarrier;
extern PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
extern PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
extern PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
extern PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
extern PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
extern PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
extern PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
extern PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
extern PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
extern PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
extern PFNGLBLITFRAMEBUFFEREXTPROC glBlitFramebufferEXT;
#endif // !_WINDOWS #endif // !_WINDOWS
#endif #endif