Better handle GL errors in EtcTexture::bind().
authorMichael Brasser <michael.brasser@live.com>
Tue, 30 Apr 2013 18:06:44 +0000 (13:06 -0500)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 3 May 2013 17:11:18 +0000 (19:11 +0200)
The scenegraph as a whole does not typically do GL error checking. That
means GL errors occurring elsewhere could cause the etcprovider to unload
textures that loaded correctly.

Change-Id: Ic8e0caa62dab50b391e226cf0a493bc7e357dc46
Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>

examples/quick/textureprovider/etcprovider.cpp

index 52c2c17..04545fe 100644 (file)
@@ -121,6 +121,10 @@ void EtcTexture::bind()
                 "paddedWidth: " << m_paddedSize.width() << "paddedHeight: " << m_paddedSize.height();
 #endif
 
+#ifndef QT_NO_DEBUG
+    while (glGetError() != GL_NO_ERROR) { }
+#endif
+
     QOpenGLContext *ctx = QOpenGLContext::currentContext();
     Q_ASSERT(ctx != 0);
     ctx->functions()->glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_ETC1_RGB8_OES,
@@ -128,6 +132,7 @@ void EtcTexture::bind()
                                              (m_paddedSize.width() * m_paddedSize.height()) >> 1,
                                              m_data.data() + 16);
 
+#ifndef QT_NO_DEBUG
     // Gracefully fail in case of an error...
     GLuint error = glGetError();
     if (error != GL_NO_ERROR) {
@@ -137,6 +142,7 @@ void EtcTexture::bind()
         m_texture_id = 0;
         return;
     }
+#endif
 
     m_uploaded = true;
     updateBindOptions(true);