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:
parent
a3d740ff23
commit
2708b2abeb
|
@ -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, ¤t->renderbuf);
|
glGenRenderbuffers(1, ¤t->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);
|
||||||
}
|
}
|
||||||
|
|
126
FrameBuffer.cpp
126
FrameBuffer.cpp
|
@ -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, ¤t->fbo);
|
glGenFramebuffers(1, ¤t->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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
250
OpenGL.cpp
250
OpenGL.cpp
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
26
OpenGL.h
26
OpenGL.h
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user