summaryrefslogtreecommitdiffstats
path: root/examples/opengl/hellowindow/main.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@nokia.com>2012-05-25 12:50:21 +0200
committerQt by Nokia <qt-info@nokia.com>2012-05-25 21:42:14 +0200
commit57f243594e83708f2daa8147901cbea965e5c295 (patch)
tree035adc2734192023a043c108db6fddf2d9c27159 /examples/opengl/hellowindow/main.cpp
parent7381328bcc37283be97eedddc24c46be1e38490e (diff)
OpenGL/HelloWindow example: Fix resource leaks.
Change-Id: Icf776b5581b3a632e8cef19af1059503146c158c Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Diffstat (limited to 'examples/opengl/hellowindow/main.cpp')
-rw-r--r--examples/opengl/hellowindow/main.cpp20
1 files changed, 15 insertions, 5 deletions
diff --git a/examples/opengl/hellowindow/main.cpp b/examples/opengl/hellowindow/main.cpp
index e1fde9b5b8..1c11639ebc 100644
--- a/examples/opengl/hellowindow/main.cpp
+++ b/examples/opengl/hellowindow/main.cpp
@@ -66,15 +66,18 @@ int main(int argc, char **argv)
QSize windowSize(400, 320);
int delta = 40;
- Renderer *rendererA = new Renderer(format);
+ QList<QWindow *> windows;
+ QSharedPointer<Renderer> rendererA(new Renderer(format));
+
HelloWindow *windowA = new HelloWindow(rendererA);
windowA->setGeometry(QRect(center, windowSize).translated(-windowSize.width() - delta / 2, 0));
windowA->setWindowTitle(QLatin1String("Thread A - Context A"));
windowA->setVisible(true);
+ windows.prepend(windowA);
QList<QThread *> renderThreads;
if (multipleWindows) {
- Renderer *rendererB = new Renderer(format, rendererA);
+ QSharedPointer<Renderer> rendererB(new Renderer(format, rendererA.data()));
QThread *renderThread = new QThread;
rendererB->moveToThread(renderThread);
@@ -84,19 +87,21 @@ int main(int argc, char **argv)
windowB->setGeometry(QRect(center, windowSize).translated(delta / 2, 0));
windowB->setWindowTitle(QLatin1String("Thread A - Context A"));
windowB->setVisible(true);
+ windows.prepend(windowB);
HelloWindow *windowC = new HelloWindow(rendererB);
windowC->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, windowSize.height() + delta));
windowC->setWindowTitle(QLatin1String("Thread B - Context B"));
windowC->setVisible(true);
+ windows.prepend(windowC);
for (int i = 1; i < QGuiApplication::screens().size(); ++i) {
QScreen *screen = QGuiApplication::screens().at(i);
- Renderer *renderer = new Renderer(format, rendererA, screen);
+ QSharedPointer<Renderer> renderer(new Renderer(format, rendererA.data(), screen));
renderThread = new QThread;
renderer->moveToThread(renderThread);
- renderThreads << renderThread;
+ renderThreads.prepend(renderThread);
QRect screenGeometry = screen->availableGeometry();
QPoint center = screenGeometry.center();
@@ -110,6 +115,7 @@ int main(int argc, char **argv)
QChar id = QChar('B' + i);
window->setWindowTitle(QLatin1String("Thread ") + id + QLatin1String(" - Context ") + id);
window->setVisible(true);
+ windows.prepend(window);
}
}
@@ -118,8 +124,12 @@ int main(int argc, char **argv)
renderThreads.at(i)->start();
}
- app.exec();
+ const int exitValue = app.exec();
for (int i = 0; i < renderThreads.size(); ++i)
renderThreads.at(i)->wait();
+ qDeleteAll(windows);
+ qDeleteAll(renderThreads);
+
+ return exitValue;
}