From edea45b25b50932c8c072679d36e97b3cc3c1326 Mon Sep 17 00:00:00 2001 From: Valery Volgutov Date: Tue, 21 May 2013 12:02:19 -0700 Subject: [PATCH 19/22] Fix FBO restoring in QOpenGLTextureGlyphCache QOpenGLTextureGlyphCache::restoreTextureData restores FBO which was binded before restoreTextureData call. More specifically, it restores QOpenGLContextPrivate's current_fbo member. This works if FBO was binded by QOpenGLFramebufferObject but not if FBO was binded using glBindFramebufferObject and rendering done via QOpenGLPaintDevice. This patch fixes it by querying current FBO using GL_FRAMEBUFFER_BINDING query and restoring it. Upstream-Status: Backport https://codereview.qt-project.org/#change,56608 --- src/gui/opengl/qopengltextureglyphcache.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gui/opengl/qopengltextureglyphcache.cpp b/src/gui/opengl/qopengltextureglyphcache.cpp index 8822faf..022356a 100644 --- a/src/gui/opengl/qopengltextureglyphcache.cpp +++ b/src/gui/opengl/qopengltextureglyphcache.cpp @@ -147,6 +147,9 @@ void QOpenGLTextureGlyphCache::resizeTextureData(int width, int height) return; } + GLuint saveFbo; + glGetIntegerv(GL_FRAMEBUFFER_BINDING, &saveFbo); + int oldWidth = m_textureResource->m_width; int oldHeight = m_textureResource->m_height; @@ -265,7 +268,7 @@ void QOpenGLTextureGlyphCache::resizeTextureData(int width, int height) glDeleteTextures(1, &tmp_texture); glDeleteTextures(1, &oldTexture); - funcs.glBindFramebuffer(GL_FRAMEBUFFER, ctx->d_func()->current_fbo); + funcs.glBindFramebuffer(GL_FRAMEBUFFER, saveFbo); if (pex != 0) { glViewport(pex->x, pex->y, pex->width, pex->height); -- 1.8.3.2