Index: source/graphics/LOSTexture.cpp =================================================================== --- source/graphics/LOSTexture.cpp +++ source/graphics/LOSTexture.cpp @@ -155,9 +155,6 @@ m_Dirty = false; } - GLint originalFBO; - glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &originalFBO); - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_smoothFbo); pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, whichTex ? m_TextureSmooth2 : m_TextureSmooth1, 0); @@ -214,7 +211,7 @@ pglFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, 0, 0); - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, originalFBO); + pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); whichTex = !whichTex; } Index: source/renderer/PostprocManager.cpp =================================================================== --- source/renderer/PostprocManager.cpp +++ source/renderer/PostprocManager.cpp @@ -332,9 +332,6 @@ { glDisable(GL_BLEND); - GLint originalFBO; - glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &originalFBO); - int width = m_Width, height = m_Height; #define SCALE_AND_BLUR(tex1, tex2, temptex) \ @@ -349,8 +346,6 @@ SCALE_AND_BLUR(m_BlurTex4a, m_BlurTex8a, m_BlurTex8b); #undef SCALE_AND_BLUR - - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, originalFBO); } @@ -496,6 +491,7 @@ // (This may need to change depending on future usage, however that will have a fps hit) ApplyBlur(); + pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m_PingFbo); for (int pass = 0; pass < m_PostProcTech->GetNumPasses(); ++pass) ApplyEffect(m_PostProcTech, pass); Index: source/renderer/Renderer.cpp =================================================================== --- source/renderer/Renderer.cpp +++ source/renderer/Renderer.cpp @@ -1020,10 +1020,6 @@ { PROFILE3_GPU("water reflections"); - // Save the post-processing framebuffer. - GLint fbo; - glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fbo); - WaterManager& wm = m->waterManager; // Remember old camera @@ -1087,10 +1083,7 @@ m_ViewCamera = normalCamera; m->SetOpenGLCamera(m_ViewCamera); - // rebind post-processing frambuffer. - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); - - return; + pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } @@ -1100,10 +1093,6 @@ { PROFILE3_GPU("water refractions"); - // Save the post-processing framebuffer. - GLint fbo; - glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &fbo); - WaterManager& wm = m->waterManager; // Remember old camera @@ -1151,10 +1140,7 @@ m_ViewCamera = normalCamera; m->SetOpenGLCamera(m_ViewCamera); - // rebind post-processing frambuffer. - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); - - return; + pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } void CRenderer::RenderSilhouettes(const CShaderDefines& context) @@ -1301,12 +1287,6 @@ GetScene().GetLOSTexture().InterpolateLOS(); - if (g_RenderingOptions.GetPostProc()) - { - m->postprocManager.Initialize(); - m->postprocManager.CaptureRenderOutput(); - } - CShaderDefines context = m->globalContext; int cullGroup = CULL_DEFAULT; @@ -1338,10 +1318,18 @@ RenderShadowMap(context); } + ogl_WarnIfError(); + + if (m_WaterManager->m_RenderWater) { - PROFILE3_GPU("clear buffers"); - glClearColor(m_ClearColor[0], m_ClearColor[1], m_ClearColor[2], m_ClearColor[3]); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); + if (waterScissor.GetVolume() > 0 && m_WaterManager->WillRenderFancyWater()) + { + PROFILE3_GPU("water scissor"); + RenderReflections(context, waterScissor); + + if (g_RenderingOptions.GetWaterRefraction()) + RenderRefractions(context, waterScissor); + } } if (g_RenderingOptions.GetPostProc()) @@ -1351,20 +1339,14 @@ m->postprocManager.SetDepthBufferClipPlanes( m_ViewCamera.GetNearPlane(), m_ViewCamera.GetFarPlane() ); + m->postprocManager.Initialize(); + m->postprocManager.CaptureRenderOutput(); } - ogl_WarnIfError(); - - if (m_WaterManager->m_RenderWater) { - if (waterScissor.GetVolume() > 0 && m_WaterManager->WillRenderFancyWater()) - { - PROFILE3_GPU("water scissor"); - RenderReflections(context, waterScissor); - - if (g_RenderingOptions.GetWaterRefraction()) - RenderRefractions(context, waterScissor); - } + PROFILE3_GPU("clear buffers"); + glClearColor(m_ClearColor[0], m_ClearColor[1], m_ClearColor[2], m_ClearColor[3]); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); } if (g_RenderingOptions.GetShowSky()) Index: source/renderer/ShadowMap.cpp =================================================================== --- source/renderer/ShadowMap.cpp +++ source/renderer/ShadowMap.cpp @@ -599,11 +599,6 @@ // Set up to render into shadow map texture void ShadowMap::BeginRender() { - // HACK HACK: this depends in non-obvious ways on the behaviour of the caller - - // save caller's FBO - glGetIntegerv(GL_FRAMEBUFFER_BINDING_EXT, &m->SavedViewFBO); - // Calc remaining shadow matrices m->CalcShadowMatrices(); @@ -656,7 +651,7 @@ { PROFILE("unbind framebuffer"); - pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m->SavedViewFBO); + pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); } const SViewPort vp = { 0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight() };