summaryrefslogtreecommitdiffstats
path: root/src/opengl/qgl.cpp
diff options
context:
space:
mode:
authorRhys Weatherley <rhys.weatherley@nokia.com>2009-12-08 01:02:46 (GMT)
committerRhys Weatherley <rhys.weatherley@nokia.com>2009-12-08 01:02:46 (GMT)
commit05d4b4c72a5089885c1515833e34177607c2c511 (patch)
tree814938ffa6d3394bc82d4135c40e9727a9aaf5eb /src/opengl/qgl.cpp
parentac90a37e5bec3c5b6cdc01a836f8e562395a3863 (diff)
downloadQt-05d4b4c72a5089885c1515833e34177607c2c511.zip
Qt-05d4b4c72a5089885c1515833e34177607c2c511.tar.gz
Qt-05d4b4c72a5089885c1515833e34177607c2c511.tar.bz2
Fix GL_BGRA formats under OpenGL/ES systems
OpenGL/ES requires that the internal and external formats be the same when calling glTexImage2D(). This caused problems with devices that had the GL_EXT_bgra extension. This change makes the formats the same just before the upload and also makes sure that the pixel type is GL_UNSIGNED_BYTE when GL_BGRA is used. No change for desktop systems. Reviewed-by: Donald Carr
Diffstat (limited to 'src/opengl/qgl.cpp')
-rw-r--r--src/opengl/qgl.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 1ff102f..967ba48 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -2234,6 +2234,14 @@ QGLTexture* QGLContextPrivate::bindTexture(const QImage &image, GLenum target, G
}
}
}
+#ifdef QT_OPENGL_ES
+ // OpenGL/ES requires that the internal and external formats be identical.
+ // This is typically used to convert GL_RGBA into GL_BGRA.
+ // Also, we need to use GL_UNSIGNED_BYTE when the format is GL_BGRA.
+ internalFormat = externalFormat;
+ if (pixel_type == GL_UNSIGNED_INT_8_8_8_8_REV)
+ pixel_type = GL_UNSIGNED_BYTE;
+#endif
#ifdef QGL_BIND_TEXTURE_DEBUG
printf(" - uploading, image.format=%d, externalFormat=0x%x, internalFormat=0x%x, pixel_type=0x%x\n",
img.format(), externalFormat, internalFormat, pixel_type);