diff options
author | Qt Continuous Integration System <qt-info@nokia.com> | 2010-02-05 00:47:42 (GMT) |
---|---|---|
committer | Qt Continuous Integration System <qt-info@nokia.com> | 2010-02-05 00:47:42 (GMT) |
commit | 3d5aacccdb14ca428cc05e2a0db36bf3baa1a1fa (patch) | |
tree | cf5f0dcc069c6342e3839e3cee606445bac28fce /src/opengl/qgl.cpp | |
parent | d499f265aa42231fd08df18213083aebe0db59ec (diff) | |
parent | e2f439d8ff3529d9ef50ac58da61432627a8f350 (diff) | |
download | Qt-3d5aacccdb14ca428cc05e2a0db36bf3baa1a1fa.zip Qt-3d5aacccdb14ca428cc05e2a0db36bf3baa1a1fa.tar.gz Qt-3d5aacccdb14ca428cc05e2a0db36bf3baa1a1fa.tar.bz2 |
Merge branch '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.6-integration
* '4.6' of scm.dev.nokia.troll.no:qt/oslo-staging-2: (42 commits)
Cleanup after "Changed qgraphicswidget autotest to use qWaitForWindowShown"
Cleanup after "QGraphicsWidget is painted twice on the first show"
Changed qgraphicswidget autotest to use qWaitForWindowShown.
Improved QTest::qWaitForWindowShown on X11.
Stabilize tst_QGraphicsWidget::initialShow2 (new test)
Make sure we define S_IFDIR on Windows
Fix copy/pasto
Crash when closing any top-level widget on Symbian.
Cache the sizes of the images in an animated GIF.
Fix the QAbstractSlider autotest.
Use OpenVG scissor on 90/180/270 rotations and simple clips.
Optimize single-rect IntersectClip in OpenVG using the scissor
QGraphicsWidget is painted twice on the first show.
Compiler warning in QAbstractSlider.
Optimize QPathClipper::pathToRect.
QGraphicsScene: Use QPainter::setClipRect instead of setClipPath if possible.
QStyleSheetStyle: Fix combinaison of border-image and border-radius
Revert "QAbstractScrollArea: Wheel over a scrollarea that has only one horizontal scrollbar"
Proper Fav icon is not shown, for all the links default fav icon shown
Update changes-4.6.2.
...
Diffstat (limited to 'src/opengl/qgl.cpp')
-rw-r--r-- | src/opengl/qgl.cpp | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 2a60708..fce9fdb 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1590,10 +1590,8 @@ QGLTextureCache::QGLTextureCache() Q_ASSERT(qt_gl_texture_cache == 0); qt_gl_texture_cache = this; - QImagePixmapCleanupHooks::instance()->addPixmapModificationHook(cleanupTextures); -#ifdef Q_WS_X11 - QImagePixmapCleanupHooks::instance()->addPixmapDestructionHook(cleanupPixmapSurfaces); -#endif + QImagePixmapCleanupHooks::instance()->addPixmapDataModificationHook(cleanupTextures); + QImagePixmapCleanupHooks::instance()->addPixmapDataDestructionHook(cleanupBeforePixmapDestruction); QImagePixmapCleanupHooks::instance()->addImageHook(imageCleanupHook); } @@ -1601,10 +1599,8 @@ QGLTextureCache::~QGLTextureCache() { qt_gl_texture_cache = 0; - QImagePixmapCleanupHooks::instance()->removePixmapModificationHook(cleanupTextures); -#ifdef Q_WS_X11 - QImagePixmapCleanupHooks::instance()->removePixmapDestructionHook(cleanupPixmapSurfaces); -#endif + QImagePixmapCleanupHooks::instance()->removePixmapDataModificationHook(cleanupTextures); + QImagePixmapCleanupHooks::instance()->removePixmapDataDestructionHook(cleanupBeforePixmapDestruction); QImagePixmapCleanupHooks::instance()->removeImageHook(imageCleanupHook); } @@ -1672,30 +1668,29 @@ void QGLTextureCache::imageCleanupHook(qint64 cacheKey) } -void QGLTextureCache::cleanupTextures(QPixmap* pixmap) +void QGLTextureCache::cleanupTextures(QPixmapData* pmd) { // ### remove when the GL texture cache becomes thread-safe if (qApp->thread() == QThread::currentThread()) { - const qint64 cacheKey = pixmap->cacheKey(); + const qint64 cacheKey = pmd->cacheKey(); QGLTexture *texture = instance()->getTexture(cacheKey); if (texture && texture->options & QGLContext::MemoryManagedBindOption) instance()->remove(cacheKey); } } -#if defined(Q_WS_X11) -void QGLTextureCache::cleanupPixmapSurfaces(QPixmap* pixmap) +void QGLTextureCache::cleanupBeforePixmapDestruction(QPixmapData* pmd) { // Remove any bound textures first: - cleanupTextures(pixmap); + cleanupTextures(pmd); - QPixmapData *pd = pixmap->data_ptr().data(); - if (pd->classId() == QPixmapData::X11Class) { - Q_ASSERT(pd->ref == 1); // Make sure reference counting isn't broken - QGLContextPrivate::destroyGlSurfaceForPixmap(pd); +#if defined(Q_WS_X11) + if (pmd->classId() == QPixmapData::X11Class) { + Q_ASSERT(pmd->ref == 0); // Make sure reference counting isn't broken + QGLContextPrivate::destroyGlSurfaceForPixmap(pmd); } -} #endif +} void QGLTextureCache::deleteIfEmpty() { |