summaryrefslogtreecommitdiffstats
path: root/demos
diff options
context:
space:
mode:
authorSergey Dubitskiy <sergey.dubitskiy@nokia.com>2012-02-13 14:27:29 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-17 06:46:12 +0100
commit9942ab3bf415eaa38a2e85b673292ba464a5c691 (patch)
treebffd3fff0e15277d3e95a8c452a07a1aa66d6251 /demos
parentc1fcc7174a90c16a4c0028cbdeb5bbf5c569c259 (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: Danny Pope <daniel.pope@nokia.com>
Diffstat (limited to 'demos')
-rw-r--r--demos/qt3d/cubehouse/cubeview.cpp5
-rw-r--r--demos/qt3d/cubehouse/cubeview.h2
-rw-r--r--demos/qt3d/pageflip/pageflip.cpp5
-rw-r--r--demos/qt3d/photobrowser3d/buttons.cpp8
-rw-r--r--demos/qt3d/photobrowser3d/buttons.h2
-rw-r--r--demos/qt3d/photobrowser3d/imagedisplay.cpp5
-rw-r--r--demos/qt3d/photobrowser3d/imagedisplay.h1
-rw-r--r--demos/qt3d/photobrowser3d/qatlas.cpp2
-rw-r--r--demos/qt3d/photobrowser3d/skybox.cpp6
-rw-r--r--demos/qt3d/photobrowser3d/skybox.h1
-rw-r--r--demos/qt3d/photobrowser3d/thumbnailableimage.cpp2
-rw-r--r--demos/qt3d/photobrowser3d/thumbnailnode.cpp10
-rw-r--r--demos/qt3d/photobrowser3d/thumbnailnode.h2
-rw-r--r--demos/qt3d/shapes/shapes.cpp1
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 300e3182d..08101b2b1 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 b08681171..12ffea381 100644
--- a/demos/qt3d/shapes/shapes.cpp
+++ b/demos/qt3d/shapes/shapes.cpp
@@ -452,6 +452,7 @@ void ShapesWidget::drawText
painter->draw(QGL::TriangleFan, 4);
painter->setStandardEffect(QGL::FlatColor);
glBindTexture(GL_TEXTURE_2D, 0);
+ texture.cleanupResources();
}
void ShapesWidget::ensureContext()