diff options
-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 |