src/opengl/qglpaintdevice.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
child 7 f7bc934e204c
--- a/src/opengl/qglpaintdevice.cpp	Tue Jan 26 12:42:25 2010 +0200
+++ b/src/opengl/qglpaintdevice.cpp	Tue Feb 02 00:43:10 2010 +0200
@@ -89,6 +89,12 @@
         ctx->d_ptr->current_fbo = m_thisFBO;
         glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO);
     }
+
+    // Set the default fbo for the context to m_thisFBO so that
+    // if some raw GL code between beginNativePainting() and
+    // endNativePainting() calls QGLFramebufferObject::release(),
+    // painting will revert to the window surface's fbo.
+    ctx->d_ptr->default_fbo = m_thisFBO;
 }
 
 void QGLPaintDevice::ensureActiveTarget()
@@ -101,6 +107,8 @@
         ctx->d_ptr->current_fbo = m_thisFBO;
         glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_thisFBO);
     }
+
+    ctx->d_ptr->default_fbo = m_thisFBO;
 }
 
 void QGLPaintDevice::endPaint()
@@ -111,6 +119,8 @@
         ctx->d_ptr->current_fbo = m_previousFBO;
         glBindFramebuffer(GL_FRAMEBUFFER_EXT, m_previousFBO);
     }
+
+    ctx->d_ptr->default_fbo = 0;
 }
 
 QGLFormat QGLPaintDevice::format() const