diff options
author | Sergey Dubitskiy <sergey.dubitskiy@nokia.com> | 2012-02-13 14:27:29 +1000 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-14 01:37:52 +0100 |
commit | 35e1fc8ae0ef05eb59c55de707813233757de456 (patch) | |
tree | 943869f40c9f571840749d79f2b0265a52fae5b8 /demos | |
parent | 00d127f73034c0aa4b21db5ef13490ea2ddf65b8 (diff) |
Resource handling needs refactoring.
Phase Two:
Fix all C++based demos/examples/tutorials.
Call cleanupResources() for all textures created.
Task-number: QTBUG-24043
Change-Id: I4bef23f7fe56e092de79bb91b41d6d691329b2cf
Reviewed-by: Sarah Jane Smith <sarah.j.smith@nokia.com>
Reviewed-by: Danny Pope <daniel.pope@nokia.com>
Diffstat (limited to 'demos')
-rw-r--r-- | demos/qt3d/cubehouse/cubeview.cpp | 5 | ||||
-rw-r--r-- | demos/qt3d/cubehouse/cubeview.h | 2 | ||||
-rw-r--r-- | demos/qt3d/pageflip/pageflip.cpp | 5 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/buttons.cpp | 8 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/buttons.h | 2 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/imagedisplay.cpp | 5 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/imagedisplay.h | 1 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/qatlas.cpp | 2 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/skybox.cpp | 6 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/skybox.h | 1 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/thumbnailableimage.cpp | 2 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/thumbnailnode.cpp | 10 | ||||
-rw-r--r-- | demos/qt3d/photobrowser3d/thumbnailnode.h | 2 | ||||
-rw-r--r-- | demos/qt3d/shapes/shapes.cpp | 1 |
14 files changed, 50 insertions, 2 deletions
diff --git a/demos/qt3d/cubehouse/cubeview.cpp b/demos/qt3d/cubehouse/cubeview.cpp index 54f172abe..191fad658 100644 --- a/demos/qt3d/cubehouse/cubeview.cpp +++ b/demos/qt3d/cubehouse/cubeview.cpp @@ -83,6 +83,11 @@ CubeView::CubeView(QWindow *parent) time.start(); } +CubeView::~CubeView() +{ + texture.cleanupResources(); +} + void CubeView::initializeGL(QGLPainter *painter) { QGLBuilder builder; diff --git a/demos/qt3d/cubehouse/cubeview.h b/demos/qt3d/cubehouse/cubeview.h index f07060b20..7194a5a81 100644 --- a/demos/qt3d/cubehouse/cubeview.h +++ b/demos/qt3d/cubehouse/cubeview.h @@ -55,7 +55,7 @@ class CubeView : public QGLView Q_PROPERTY(qreal cubeAngle READ cubeAngle WRITE setCubeAngle) public: CubeView(QWindow *parent = 0); - ~CubeView() {} + ~CubeView(); void setShowFrameRate(bool value) { showFrameRate = value; } void setStereo(bool value) { stereo = value; } diff --git a/demos/qt3d/pageflip/pageflip.cpp b/demos/qt3d/pageflip/pageflip.cpp index 3b9e46d12..a65738ead 100644 --- a/demos/qt3d/pageflip/pageflip.cpp +++ b/demos/qt3d/pageflip/pageflip.cpp @@ -148,6 +148,11 @@ PageFlipView::PageFlipView(QWindow *parent) PageFlipView::~PageFlipView() { + textures[0].cleanupResources(); + textures[1].cleanupResources(); + textures[2].cleanupResources(); + textures[3].cleanupResources(); + gradientTexture.cleanupResources(); delete effect; } diff --git a/demos/qt3d/photobrowser3d/buttons.cpp b/demos/qt3d/photobrowser3d/buttons.cpp index c296dfe10..cf543f57d 100644 --- a/demos/qt3d/photobrowser3d/buttons.cpp +++ b/demos/qt3d/photobrowser3d/buttons.cpp @@ -58,6 +58,7 @@ Buttons::Buttons(QObject *parent, QSharedPointer<QGLMaterialCollection> palette) QImage im(":/controls/arrows-left.png"); m_size = im.size(); QGLTexture2D *tex = new QGLTexture2D(mat); + m_LoadedTextures.push_back(tex); tex->setImage(im); mat->setTexture(tex); @@ -98,6 +99,13 @@ Buttons::Buttons(QObject *parent, QSharedPointer<QGLMaterialCollection> palette) m_left->setOption(QGLSceneNode::CullBoundingBox, false); } +Buttons::~Buttons() +{ + for (int i=0; i<m_LoadedTextures.count(); ++i) { + m_LoadedTextures.at(i)->cleanupResources(); + } +} + void Buttons::draw(QGLPainter *painter) { painter->projectionMatrix().push(); diff --git a/demos/qt3d/photobrowser3d/buttons.h b/demos/qt3d/photobrowser3d/buttons.h index e136f0e6b..654766729 100644 --- a/demos/qt3d/photobrowser3d/buttons.h +++ b/demos/qt3d/photobrowser3d/buttons.h @@ -51,12 +51,14 @@ class Buttons : public QGLSceneNode Q_OBJECT public: explicit Buttons(QObject *parent, QSharedPointer<QGLMaterialCollection> palette); + ~Buttons(); void draw(QGLPainter *painter); void clearPositions(); private: QGLSceneNode *m_left; QGLSceneNode *m_right; QSize m_size; + QList<QGLTexture2D*> m_LoadedTextures; }; #endif // BUTTONS_H diff --git a/demos/qt3d/photobrowser3d/imagedisplay.cpp b/demos/qt3d/photobrowser3d/imagedisplay.cpp index b1180ac7a..79bb3d208 100644 --- a/demos/qt3d/photobrowser3d/imagedisplay.cpp +++ b/demos/qt3d/photobrowser3d/imagedisplay.cpp @@ -128,6 +128,7 @@ ImageDisplay::ImageDisplay(QObject *parent, QSharedPointer<QGLMaterialCollection m_wall->setEffect(QGL::FlatReplaceTexture2D); QGLMaterial *mat = new QGLMaterial(); QGLTexture2D *tex = new QGLTexture2D(mat); + m_LoadedTextures.push_back(tex); tex->setImage(QImage(":/res/images/girder.png")); mat->setTexture(tex); mat->setObjectName("girder material"); @@ -157,6 +158,7 @@ ImageDisplay::ImageDisplay(QObject *parent, QSharedPointer<QGLMaterialCollection m_frameImage = qMakeFrameImage(); mat = new QGLMaterial(); tex = new QGLTexture2D(mat); + m_LoadedTextures.push_back(tex); tex->setHorizontalWrap(QGL::ClampToEdge); tex->setImage(m_frameImage); mat->setTexture(tex); @@ -173,6 +175,9 @@ ImageDisplay::ImageDisplay(QObject *parent, QSharedPointer<QGLMaterialCollection ImageDisplay::~ImageDisplay() { + for (int i=0; i<m_LoadedTextures.count(); ++i) { + m_LoadedTextures.at(i)->cleanupResources(); + } delete m_effect; } diff --git a/demos/qt3d/photobrowser3d/imagedisplay.h b/demos/qt3d/photobrowser3d/imagedisplay.h index 96f092d7c..462b07567 100644 --- a/demos/qt3d/photobrowser3d/imagedisplay.h +++ b/demos/qt3d/photobrowser3d/imagedisplay.h @@ -74,6 +74,7 @@ private: QGLSceneNode *m_currentWall; ThumbnailNode *m_currentFrame; QGLAbstractEffect *m_effect; + QList<QGLTexture2D*> m_LoadedTextures; bool m_imageSetToDefault; int m_count; qreal m_size; diff --git a/demos/qt3d/photobrowser3d/qatlas.cpp b/demos/qt3d/photobrowser3d/qatlas.cpp index 6b6343ec2..200974284 100644 --- a/demos/qt3d/photobrowser3d/qatlas.cpp +++ b/demos/qt3d/photobrowser3d/qatlas.cpp @@ -147,6 +147,8 @@ void QAtlas::paint(QGLPainter *painter) painter->popSurface(); glEnable(GL_DEPTH_TEST); + + t.cleanupResources(); } QRect QAtlas::allocate(const QSize &size, const QImage &image, const QGL::IndexArray &indices) diff --git a/demos/qt3d/photobrowser3d/skybox.cpp b/demos/qt3d/photobrowser3d/skybox.cpp index eaf884ce1..ce13ed7f8 100644 --- a/demos/qt3d/photobrowser3d/skybox.cpp +++ b/demos/qt3d/photobrowser3d/skybox.cpp @@ -141,6 +141,12 @@ SkyBox::SkyBox(QGLView *view, const QString &imagePath) setImagePath(imagePath.isEmpty() ? resourceBase : imagePath); } +SkyBox::~SkyBox() +{ + for (int i=0; i<6; ++i) { + m_faces[i]->material()->texture()->cleanupResources(); + } +} void SkyBox::setImagePath(const QString &imagePath) { diff --git a/demos/qt3d/photobrowser3d/skybox.h b/demos/qt3d/photobrowser3d/skybox.h index 4b31b1855..4e61fda32 100644 --- a/demos/qt3d/photobrowser3d/skybox.h +++ b/demos/qt3d/photobrowser3d/skybox.h @@ -58,6 +58,7 @@ class SkyBox : public QObject Q_OBJECT public: SkyBox(QGLView *view, const QString &imagePath = QString()); + ~SkyBox(); QString imagePath() const { return m_imagePath; } void setImagePath(const QString &imagePath); void draw(QGLPainter *painter) const; diff --git a/demos/qt3d/photobrowser3d/thumbnailableimage.cpp b/demos/qt3d/photobrowser3d/thumbnailableimage.cpp index f44ffb3a1..abed822dd 100644 --- a/demos/qt3d/photobrowser3d/thumbnailableimage.cpp +++ b/demos/qt3d/photobrowser3d/thumbnailableimage.cpp @@ -93,6 +93,8 @@ ThumbnailableImagePrivate::ThumbnailableImagePrivate() ThumbnailableImagePrivate::~ThumbnailableImagePrivate() { + if (tex) + tex->cleanupResources(); } ThumbnailableImage::ThumbnailableImage() diff --git a/demos/qt3d/photobrowser3d/thumbnailnode.cpp b/demos/qt3d/photobrowser3d/thumbnailnode.cpp index f6689006c..d419e6165 100644 --- a/demos/qt3d/photobrowser3d/thumbnailnode.cpp +++ b/demos/qt3d/photobrowser3d/thumbnailnode.cpp @@ -65,6 +65,9 @@ ThumbnailNode::ThumbnailNode(QObject *parent) ThumbnailNode::~ThumbnailNode() { + for (int i=0; i<m_LoadedTextures.count(); ++i) { + m_LoadedTextures.at(i)->cleanupResources(); + } delete m_full; } @@ -121,8 +124,12 @@ void ThumbnailNode::destroyFullNode() if (!m_full) return; QGLMaterial *mat = m_full->material(); - if (m_full->materialIndex() != m_defaultMaterial) + if (m_full->materialIndex() != m_defaultMaterial) { m_full->palette()->removeMaterial(mat); + mat->texture()->cleanupResources(); + m_LoadedTextures.removeAll(mat->texture()); + delete mat; + } delete m_full; m_full = 0; } @@ -140,6 +147,7 @@ void ThumbnailNode::loadFullImage() { QGLMaterial *mat = new QGLMaterial; QGLTexture2D *tex = new QGLTexture2D(mat); + m_LoadedTextures.push_back(tex); tex->setImage(m_image.data()); mat->setTexture(tex); mat->setObjectName(m_image.url().path()); diff --git a/demos/qt3d/photobrowser3d/thumbnailnode.h b/demos/qt3d/photobrowser3d/thumbnailnode.h index d1d63cee1..4a77c907e 100644 --- a/demos/qt3d/photobrowser3d/thumbnailnode.h +++ b/demos/qt3d/photobrowser3d/thumbnailnode.h @@ -91,6 +91,8 @@ private: QSizeF m_max; QObject *m_manager; Distance m_lastDistance; + + QList<QGLTexture2D*> m_LoadedTextures; }; #endif // THUMBNAILNODE_H diff --git a/demos/qt3d/shapes/shapes.cpp b/demos/qt3d/shapes/shapes.cpp index 21e6a50fb..bd32814fe 100644 --- a/demos/qt3d/shapes/shapes.cpp +++ b/demos/qt3d/shapes/shapes.cpp @@ -453,6 +453,7 @@ void ShapesWidget::drawText painter->draw(QGL::TriangleFan, 4); painter->setStandardEffect(QGL::FlatColor); glBindTexture(GL_TEXTURE_2D, 0); + texture.cleanupResources(); } void ShapesWidget::ensureContext() |