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

View File

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

View File

@ -76,18 +76,6 @@ PFNGLDELETEBUFFERSPROC glDeleteBuffers;
PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
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
BOOL isExtensionSupported( const char *extension )
@ -182,24 +170,10 @@ void OGL_InitExtensions()
glBindImageTexture = (PFNGLBINDIMAGETEXTUREPROC)wglGetProcAddress( "glBindImageTexture" );
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
if (glGenFramebuffers != NULL)
OGL.framebufferMode = GLInfo::fbFBO;
else if (glBindFramebufferEXT != NULL)
OGL.framebufferMode = GLInfo::fbFBOEXT;
else
OGL.framebufferMode = GLInfo::fbNone;
@ -1119,7 +1093,7 @@ void OGL_SaveScreenshot()
GLint oldMode;
glGetIntegerv( GL_READ_BUFFER, &oldMode );
ogl_glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glBindFramebuffer(GL_READ_FRAMEBUFFER, 0);
glReadBuffer( GL_FRONT );
glReadPixels( 0, OGL.heightOffset, OGL.width, OGL.height, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixelData );
glReadBuffer( oldMode );
@ -1214,217 +1188,8 @@ void OGL_SwapBuffers()
#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() {
GLenum e = ogl_glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
GLenum e = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
switch (e) {
case GL_FRAMEBUFFER_UNDEFINED:
printf("FBO Undefined\n");
@ -1455,14 +1220,3 @@ bool checkFBO() {
}
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;
enum {
fbNone,
fbFBO,
fbFBOEXT
fbFBO
} framebufferMode;
enum {
rsNone = 0,
@ -116,18 +115,6 @@ void OGL_SaveScreenshot();
void OGL_SwapBuffers();
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();
#ifdef _WINDOWS
@ -182,16 +169,5 @@ extern PFNGLDELETEBUFFERSPROC glDeleteBuffers;
extern PFNGLBINDIMAGETEXTUREPROC glBindImageTexture;
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