diff options
author | Elvis Lee <kwangwoong.lee@lge.com> | 2013-01-14 11:57:22 +0900 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-01-25 02:17:22 +0100 |
commit | a6faecba1a878f0a741d5015c0c116dd6891af70 (patch) | |
tree | fd5b7f5e32805b1154bfc810ac2ed38089fa0f99 /src | |
parent | c0860d26a1b87f42842faeda3e6043a775916594 (diff) |
QOpenGLTextureCache : make it possible to skip qgl_byteSwapImage
Improving performance when making texture from QImage, this commit
makes it possible to skip qgl_byteSwapImage. If gl_FragColor of fragment
shader is properly configured, qgl_byteSwapImage is not required.
Ex) gl_FragColor = texture2D(texture, textureCoord).bgra;
Change-Id: If1f2d7dc1fc1c4e583cc3f38dec95a9d29417cd2
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/opengl/qopengltexturecache.cpp | 7 | ||||
-rw-r--r-- | src/gui/opengl/qopengltexturecache_p.h | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/gui/opengl/qopengltexturecache.cpp b/src/gui/opengl/qopengltexturecache.cpp index fffc3688e3..94b82885ff 100644 --- a/src/gui/opengl/qopengltexturecache.cpp +++ b/src/gui/opengl/qopengltexturecache.cpp @@ -95,9 +95,10 @@ void QOpenGLTextureCacheWrapper::cleanupTexturesForPixmapData(QPlatformPixmap *p cleanupTexturesForCacheKey(pmd->cacheKey()); } -QOpenGLTextureCache::QOpenGLTextureCache(QOpenGLContext *ctx) +QOpenGLTextureCache::QOpenGLTextureCache(QOpenGLContext *ctx, bool useByteSwapImage) : QOpenGLSharedResource(ctx->shareGroup()) , m_cache(64 * 1024) // 64 MB cache + , m_useByteSwapImage(useByteSwapImage) { } @@ -180,7 +181,9 @@ GLuint QOpenGLTextureCache::bindTexture(QOpenGLContext *context, qint64 key, con QImage tx = image.convertToFormat(QImage::Format_ARGB32_Premultiplied); - qgl_byteSwapImage(tx); + // Performance could be improved by skipping qgl_byteSwapImage(). + if (m_useByteSwapImage) + qgl_byteSwapImage(tx); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tx.width(), tx.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, const_cast<const QImage &>(tx).bits()); diff --git a/src/gui/opengl/qopengltexturecache_p.h b/src/gui/opengl/qopengltexturecache_p.h index 2e82d5f373..d4d3f00069 100644 --- a/src/gui/opengl/qopengltexturecache_p.h +++ b/src/gui/opengl/qopengltexturecache_p.h @@ -78,7 +78,7 @@ class Q_GUI_EXPORT QOpenGLTextureCache : public QOpenGLSharedResource public: static QOpenGLTextureCache *cacheForContext(QOpenGLContext *context); - QOpenGLTextureCache(QOpenGLContext *); + QOpenGLTextureCache(QOpenGLContext *, bool useByteSwapImage = true); ~QOpenGLTextureCache(); GLuint bindTexture(QOpenGLContext *context, const QPixmap &pixmap); @@ -94,6 +94,7 @@ private: QMutex m_mutex; QCache<quint64, QOpenGLCachedTexture> m_cache; + bool m_useByteSwapImage; }; QT_END_NAMESPACE |