diff --git a/DepthBuffer.cpp b/DepthBuffer.cpp index 217f62ad..53ce0064 100644 --- a/DepthBuffer.cpp +++ b/DepthBuffer.cpp @@ -67,6 +67,8 @@ void DepthBuffer_Remove( DepthBuffer *buffer ) if (buffer->renderbuf != 0) ogl_glDeleteRenderbuffers(1, &buffer->renderbuf); + if (buffer->fbo != 0) + ogl_glDeleteFramebuffers(1, &buffer->fbo); if (buffer->depth_texture != NULL) TextureCache_Remove( buffer->depth_texture ); free( buffer ); @@ -96,6 +98,7 @@ DepthBuffer *DepthBuffer_AddTop() newtop->lower = depthBuffer.top; newtop->higher = NULL; newtop->renderbuf = 0; + newtop->fbo = 0; if (depthBuffer.top) depthBuffer.top->higher = newtop; diff --git a/DepthBuffer.h b/DepthBuffer.h index afb7048d..a074f385 100644 --- a/DepthBuffer.h +++ b/DepthBuffer.h @@ -10,6 +10,7 @@ struct DepthBuffer u32 address, width; GLuint renderbuf; CachedTexture *depth_texture; + GLuint fbo; }; struct DepthBufferInfo diff --git a/FrameBuffer.cpp b/FrameBuffer.cpp index 1183a7be..57a20d08 100644 --- a/FrameBuffer.cpp +++ b/FrameBuffer.cpp @@ -345,6 +345,13 @@ void _initDepthTexture() glTexImage2D(GL_TEXTURE_2D, 0, depthTextureInternalFormat, depthBuffer.top->depth_texture->realWidth, depthBuffer.top->depth_texture->realHeight, 0, GL_RED, depthTextureType, NULL); 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); frameBuffer.top->pDepthBuffer = depthBuffer.top; void GLSL_ClearDepthBuffer(); GLSL_ClearDepthBuffer();