From 7f33db1f0c877dee0cb671066e0e0382fb4ec46d Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 25 Jun 2012 21:53:31 +0100 Subject: [PATCH] Restore previously bound FBO in renderer functions --- src/Renderer.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 51be5c2ed..ef14a417a 100644 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -34,17 +34,20 @@ extern "C" void Renderer::clearScreen(float alpha) { #ifdef OGLR + GLint prevFbo; if(alpha > 0.999f) { glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glClear(GL_COLOR_BUFFER_BIT); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); } else { glBlendEquation(GL_FUNC_REVERSE_SUBTRACT); glColor4f(1.0f, 1.0f, 1.0f, alpha); + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glBegin(GL_QUADS); glVertex2f(0, 0); @@ -52,7 +55,7 @@ void Renderer::clearScreen(float alpha) glVertex2f(XRES, YRES); glVertex2f(0, YRES); glEnd(); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); glBlendEquation(GL_FUNC_ADD); } glClearColor(0.0f, 0.0f, 0.0f, 1.0f); @@ -486,6 +489,8 @@ void Renderer::DrawSigns() int i, j, x, y, w, h, dx, dy,mx,my,b=1,bq; std::vector signs = sim->signs; #ifdef OGLR + GLint prevFbo; + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glTranslated(0, MENUSIZE, 0); #endif @@ -563,7 +568,7 @@ void Renderer::DrawSigns() } #ifdef OGLR glTranslated(0, -MENUSIZE, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); #endif } @@ -746,10 +751,11 @@ void Renderer::render_parts() int cflatV = 0, cflatC = 0, cflat = 0; int caddV = 0, caddC = 0, cadd = 0; int clineV = 0, clineC = 0, cline = 0; - GLint origBlendSrc, origBlendDst; + GLint origBlendSrc, origBlendDst, prevFbo; glGetIntegerv(GL_BLEND_SRC, &origBlendSrc); glGetIntegerv(GL_BLEND_DST, &origBlendDst); + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); //Render to the particle FBO glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glTranslated(0, MENUSIZE, 0); @@ -1659,7 +1665,7 @@ void Renderer::render_parts() //Reset FBO glTranslated(0, -MENUSIZE, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); glBlendFunc(origBlendSrc, origBlendDst); #endif @@ -1676,6 +1682,8 @@ void Renderer::draw_other() // EMP effect if (emp_decor>0) { #ifdef OGLR + GLint prevFbo; + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glTranslated(0, MENUSIZE, 0); float femp_decor = ((float)emp_decor)/255.0f; @@ -1693,7 +1701,7 @@ void Renderer::draw_other() // EMP effect glVertex2f(0, YRES+MENUSIZE); glEnd(); glTranslated(0, -MENUSIZE, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); #else int r=emp_decor*2.5, g=100+emp_decor*1.5, b=255; int a=(1.0*emp_decor/110)*255; @@ -1810,6 +1818,7 @@ void Renderer::draw_air() #else int sdl_scale = 1; GLuint airProg; + GLint prevFbo; if(display_mode & DISPLAY_AIRC) { airProg = airProg_Cracker; @@ -1828,6 +1837,7 @@ void Renderer::draw_air() } glEnable( GL_TEXTURE_2D ); + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &prevFbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, partsFbo); glTranslated(0, MENUSIZE, 0); @@ -1862,7 +1872,7 @@ void Renderer::draw_air() glUseProgram(0); glBindTexture(GL_TEXTURE_2D, 0); glTranslated(0, -MENUSIZE, 0); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, prevFbo); glDisable( GL_TEXTURE_2D ); #endif }