aboutsummaryrefslogtreecommitdiffstats
path: root/recipes-qt/qt5/qtbase-5.1.0/0019-Fix-FBO-restoring-in-QOpenGLTextureGlyphCache.patch
blob: c3a9dd54491f1ebb49d3ad78208d70853f5a2561 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
From 7c4453b5203e908f0c851c2a34231d81eb2f73c2 Mon Sep 17 00:00:00 2001
From: Valery Volgutov <valery.volgutov@lge.com>
Date: Tue, 21 May 2013 12:02:19 -0700
Subject: [PATCH 19/23] 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

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
---
 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 ec29900..9bda1db 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