diff options
author | Rhys Weatherley <rhys.weatherley@nokia.com> | 2009-12-08 01:02:46 (GMT) |
---|---|---|
committer | Rhys Weatherley <rhys.weatherley@nokia.com> | 2009-12-08 01:02:46 (GMT) |
commit | 05d4b4c72a5089885c1515833e34177607c2c511 (patch) | |
tree | 814938ffa6d3394bc82d4135c40e9727a9aaf5eb /src/opengl/qgl.cpp | |
parent | ac90a37e5bec3c5b6cdc01a836f8e562395a3863 (diff) | |
download | Qt-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.cpp | 8 |
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); |