aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgthreadedrenderloop.cpp
Commit message (Collapse)AuthorAgeFilesLines
...
* | Abort the application if the render thread fails to startGunnar Sletta2014-08-291-0/+2
| | | | | | | | | | | | | | | | This is a system-level failure, with which we can do very little, so we abort. Change-Id: I945da8bd28df35a6c8987160a2f0177d27d6c95d Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
* | Merge remote-tracking branch 'origin/5.3' into 5.4Simon Hausmann2014-08-261-0/+12
|\| | | | | | | | | | | Conflicts: src/qml/qml/qqmlobjectcreator_p.h Change-Id: I60858ddb46866a8fa1a8576bb05b412afeeb4e41
| * Fix potential deadlook in threaded renderloop.Gunnar Sletta2014-08-141-0/+12
| | | | | | | | | | | | Change-Id: I415e632aa4e584c8fca745581f25a676db0eae42 Reviewed-by: Giulio Camuffo <giulio.camuffo@jollamobile.com> Reviewed-by: Robin Burchell <robin.burchell@viroteck.net>
* | Update license headers and add new licensesJani Heikkinen2014-08-251-19/+11
| | | | | | | | | | | | | | | | | | - Renamed LICENSE.LGPL to LICENSE.LGPLv21 - Added LICENSE.LGPLv3 & LICENSE.GPLv2 - Removed LICENSE.GPL Change-Id: I84a565e2e0caa3b76bf291a7d188a57a4b00e1b0 Reviewed-by: Jani Heikkinen <jani.heikkinen@digia.com>
* | Use the renamed qt_gl_global_share_contextJocelyn Turcotte2014-08-051-2/+2
| | | | | | | | | | Change-Id: I438c33a1dc83fd0cd1ec08bb4e4a1257a3216ca2 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Avoid eventloop recursion in touch event handling.Gunnar Sletta2014-07-311-10/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The eventloop recursion in the threaded render loop was there to preempt any pending event to make sure we worked with as recent as possible input events. The benefit of this was never verified. The recursion after the actual flush was to fix animations which were constantly started during touch events, such as a behavior tracking the mouse point. This is fixed differently. Event loop recursion is always dangerous, so we're doing what we can to avoid it. Change-Id: I120b2e98350e3b9068153415a671408773fbc769 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* | Merge "Merge remote-tracking branch 'origin/5.3' into dev" into refs/staging/devFrederik Gladhorn2014-07-021-0/+2
|\ \
| * | Merge remote-tracking branch 'origin/5.3' into devFrederik Gladhorn2014-07-021-0/+2
| |\| | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf examples/quick/scenegraph/openglunderqml/squircle.h src/quick/doc/src/qmltypereference.qdoc src/quick/scenegraph/qsgthreadedrenderloop.cpp Change-Id: Ife4f4b897044a7ffcd0710493c6aed1d87cf1ef9
| | * Set locked state while locking for grab.Gunnar Sletta2014-06-201-0/+2
| | | | | | | | | | | | | | | | | | Change-Id: If4b8fa77e6e3a288487a011e83791ad6a189675c Reviewed-by: Manish Sharma <83.manish@gmail.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | | Properly collect polish timings from all render loopsUlf Hermann2014-07-021-2/+2
|/ / | | | | | | | | | | | | | | | | | | | | Previously the polish timings were collected incorrectly from the windows render loop and not at all from the basic render loop. By collecting the polish times at the right places we can get rid of the 2-argument profile macro as well. Task-number: QTBUG-39876 Change-Id: I0b4aaf87162c652b8dcea6cd4f54db053f8312fe Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
* | Use categorized logging for all things scenegraph.Gunnar Sletta2014-07-011-125/+93
| | | | | | | | | | Change-Id: I865ee838b0fd6c257b7189f24130012b98206fd1 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* | Avoid deadlock during window hiding.Gunnar Sletta2014-07-011-2/+6
| | | | | | | | | | | | | | | | | | | | Because we do event processing in polishAndSync, hide() or handleObscurity() might have been called by the time we continue execution. We already handled that windowDestroyed() was called. Change-Id: If45bcf3fa18cef1a60ca31bc26d3830045f581d9 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Warn at runtime about badly threaded calls to QQuickItem::update()Gunnar Sletta2014-06-251-3/+5
| | | | | | | | | | Change-Id: Ia3fc01f11ff28441d4ef095b520297a73e3399d6 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Merge remote-tracking branch 'origin/5.3' into devSimon Hausmann2014-06-131-0/+2
|\| | | | | | | | | | | | | Conflicts: src/quickwidgets/qquickwidget.cpp Change-Id: Id4b080aea713df68608847bb82570231e37ce536
| * Stop polish-and-sync timer when the window is destroyedLaszlo Agocs2014-06-101-0/+2
| | | | | | | | | | | | | | | | | | | | The threaded render loop continues to run the polish-and-sync timer for ever in case the QQuickWindow is destroyed while the timer is active. Instead of pumping the timer events on the render thread for ever, the timer has to be killed somewhere. Change-Id: I8e458624e26ebfacb6cc69a4f2fbb3da57ae5e0e Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
* | Merge remote-tracking branch 'origin/stable' into devFrederik Gladhorn2014-05-101-7/+13
|\| | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: .qmake.conf src/plugins/accessible/quick/quick.pro src/quick/items/qquickpincharea.cpp src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp src/quick/scenegraph/qsgthreadedrenderloop.cpp Manually adjusted for TestHTTPServer constructor change: tests/auto/quick/qquickimage/tst_qquickimage.cpp Change-Id: I5e58a7c08ea92d6fc5e3bce98571c54f7b2ce08f
| * Follow QOpenGLContext API renamingLaszlo Agocs2014-04-251-1/+1
| | | | | | | | | | | | Task-number: QTBUG-38564 Change-Id: Ice1170339f7d650fcb6accfccf325471629343d6 Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
| * Use global context sharing from QtGui instead of QSGContextJocelyn Turcotte2014-04-041-2/+2
| | | | | | | | | | | | | | | | | | This removes QSGContext::sharedOpenGLContext and replace its uses with QOpenGLContextPrivate::globalShareContext, which is also going to be used by QOpenGLWidget and QQuickWidget. Change-Id: I1e296c3e6832f717caaf31ba7d7b27c06249219b Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
| * Let render loop be more tolerant wrt when markDirty is called.Gunnar Sletta2014-03-271-0/+4
| | | | | | | | | | Change-Id: I95f1d6fe4695a09b1b6ccaf026137dabc22ec82c Reviewed-by: Michael Brasser <michael.brasser@live.com>
| * Pass the actual window format to the offscreen surface during cleanupLaszlo Agocs2014-03-271-1/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Using the requested format (we don't have anything else since the platform window is gone) is wrong on EGL implementations that offer a different set of configurations for window and pbuffer surfaces, because we may end up with a pbuffer surface that is incompatible with the context/window due to having different color buffer sizes. To be absolutely sure that the surface is compatible, store the actual surface format so that it is available even after the platform window is gone. Change-Id: Id17c25439c463d4c37af95fc90f336d3f67c6427 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Fix QQuickView::grabWindow() on retina displaysMorten Johan Sørvig2014-03-201-1/+1
| | | | | | | | | | | | | | | | | | Multiply by window->devicePixelRatio() at all qt_gl_read_framebuffer() call sites. Task-number: QTBUG-35962 Change-Id: If58e4f97fc5d931ba2e222f8cb1a0641d52c3257 Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
| * Register animation profiler callback also from render threadUlf Hermann2014-03-181-0/+3
| | | | | | | | | | | | | | | | | | | | | | The QUnifiedTimer in the GUI thread doesn't cover the render thread animations. We need a separate registration for those. We also need to keep track of which animation events are coming from which threads. Task-number: QTCREATORBUG-11659 Change-Id: I1fdd80a5630cc6a33e527b99be7347f3bd63510f Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
| * Fix potential crash during shutdown for QQuickWindowsGunnar Sletta2014-03-171-8/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | The cleanup() function would deregister the render loop from all windows the render loop had seen, but the render loop doesn't see windows until the window gets a showEvent and for some implementations it was removed as a result of hideEvent. So add explicit tracking to QSGRenderLoop which is managed by QQuickWindow's constructor and destructor. With this, we no longer need the lists from the subclasses, so these functions are removed again. Change-Id: I05e5507ad57e23c80bacd99752654cc7d0890dc1 Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
| * Make sure QSGRenderLoop is cleaned up cleanly.Gunnar Sletta2014-03-141-0/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e13547c595913c58e6bd6a5ed80fdc729fae7d47 used a global static to clean up QSGRenderLoop which is triggered very late, potentially after SG backend API plugins have been unloaded. This results in crashes when used in combination with scenegraph-playgrounds's customcontext. Partially revert the change and instead clean up at the time of QApp::aboutToQuit and make sure we also disconnect cleanly from all QQuickWindows. This change also ensures that QSGRenderLoop::windowDestroyed() gets called for all QQuickWindows registered with the render loop. This ensures that rendering stops and that scene graph nodes and resources will be cleaned up regardless of whether the application has remembered to delete the window or not. This is a good thing as it makes the scene graph shutdown a bit cleaner. Change-Id: I9cb9093979f8eac05542f118a6ff9cfe5c84f745 Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>
* | Compress touch events in QQuickWindow.Gunnar Sletta2014-05-051-17/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | Instead of sending multiple touch updates per frame, we store the last one and flush the pending events just before we enter into the scene graph sync phase. [ChangeLog][QtQuick] QQuickWindow will compresses touch events and delivers at most one touch event per frame. Done-with: Robin Burchell <robin.burchell@jollamobile.com> Change-Id: Ia0169bc4a3f0da67709b91ca65c326934b55d372 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com> Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
* | Support shutting down the render thread without an OpenGL context.Gunnar Sletta2014-04-231-7/+7
| | | | | | | | | | | | | | | | | | | | | | | | [ChangeLog][QtQuick][SceneGraph] There might not be an OpenGL context bound when QQuickWindow::sceneGraphInvalidated() is emitted if an error occurs while cleaning up the scene graph (such as EGL_CONTEXT_LOST). This is according to the documentation, but has never occurred in practice before. Change-Id: I13dbfbb4b6d0d27fa42fcb8b54df16ea02284807 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com> Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
* | Try to simplify the threaded render loop.Gunnar Sletta2014-03-241-150/+91
|/ | | | | | | | | | | | | | | | | | | | This beast has grown and grown for some time so it was time to take step back and look at a few of the problems again. 1. show/hide vs exposed/obscured. There is really no reason why we should even bother with show. It only adds the window to a list, we can do that in handleExposure and simplify things a bit. 2. Expose, polish, repaint, sync stuff was growing increasingly complex with multiple waits and several events and states interacting. So I merged the expose into the sync and passed that information along to the render thread. The render thread now knows if the sync is for a normal state-sync or an expose. For a normal sync it will wake GUI right away. For an expose, it waits until after the renderpass has completed and the frame is swapped. Change-Id: I0b9e5135215662a43fb4ff2a51438e33c845c4a7 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* Consolidate context creation failure handling in Quick.Friedemann Kleint2014-03-131-11/+2
| | | | | | | | | Add QQuickWidget::sceneGraphError() equivalent to QQuickWindow::sceneGraphError(), move message formatting code to QQuickWindowPrivate. Change-Id: I18cd4d7e0f6ee1011c29375218dc6a044b0d2cf2 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* Stack size increase for x86 QNX systemsJames McDonnell2014-03-101-0/+4
| | | | | | | | | | | Increase the size of the stack for the scene graph thread on x86 QNX systems. The default stack size (132K) is too small for the MESA graphics driver shared libraries on these systems. Task-number: QTBUG-37338 Change-Id: I8b50aece98ef3f530f2202fc89a0e90b0b2e2e72 Reviewed-by: Sergio Ahumada <sahumada@blackberry.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
* Reset the expose cycle when polishAndSync aborts.Gunnar Sletta2014-03-051-15/+26
| | | | | | | | | | | | | | | On platforms with misbehaving expose behavior, we will get and exposure, even though the window is not renderable. This results in the renderthread being in the "wait for polish" state while the GUI thread goes back to "no state". Check for this and reset render thread's expose cycle when it is hit. Task-number: QTBUG-37201 Change-Id: I6a6c89d9016301ff19443f88a2c182012b4eb65f Reviewed-by: Ulf Hermann <ulf.hermann@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Remove isES() usage in scenegraphLaszlo Agocs2014-03-041-1/+1
| | | | | | | | | The error signal patch added some usages of QOpenGLFunctions::isES(). These need to be temporarily removed. Change-Id: Ibd1d8094059020708aefe4b3502ba56d624928b3 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
* Threaded render loop should block until the frame is swapped.Gunnar Sletta2014-02-281-1/+36
| | | | | | | | | | | | | | | | | | | | | | Introduced the concept of an expose cycle, as the WM_Expose is followed by WM_RequestSync and only after we handled the sync and then swap, should we unlock. Otherwise, we are potentially waiting for the wrong swap. This also fixes a bug when we get an expose while the render thread is animating on its own. We would previously set RequestRepaint, but this could potentially be reset by a render thread animation if the GUI thread took a short while getting to the point where it sent the RequestSync. If that requestsync did not result in SG changes, we would not render anything. With the exposeCycle, we are now guaranteed to repaint after we handled the sync, which is how it should be. Task-number: QTBUG-35805 Change-Id: Ib5c588f135763142e57f84b39dd3827fd05b9485 Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com> Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com>
* Introduced a few more signals to QQuickWindow.Gunnar Sletta2014-02-251-0/+3
| | | | | | | | | | | | Also marked the new afterAnimation() signal as \since 5.3 and introduced proper revisioning on the new signals. [Changelog][QtQuick] Added QQuickWindow::afterSynchronizing(), openglContextCreated(), sceneGraphAboutToStop(). Useful for deeper integration with the rendering. Change-Id: I5532b310506c2432325595e55ef9307b8934abee Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* Add an error signal to QQuickWindowLaszlo Agocs2014-02-211-1/+11
| | | | | | | | | | | | | | When nothing is connected to this signal, an error will be printed or, in case of Windows, a message box will be shown. If there is something connected, it is up to the application to handle the error. [ChangeLog] Added a new sceneGraphError() signal to QQuickWindow which applications can use to detect errors like OpenGL context creation failures and react in their own custom ways. Task-number: QTBUG-36138 Change-Id: I33b1e5e0e3f25872af67c5bb5ae937e3470b25f3 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
* Add a signal for syncing external animation systemsLaszlo Agocs2014-02-201-0/+2
| | | | | | | | | [ChangeLog] QQuickWindow will now emit the afterAnimating() signal from the gui thread before each scenegraph sync request. Change-Id: I4897c82f75066238e781455d4fce4fb6bbe2558e Reviewed-by: Pasi Keränen <pasi.keranen@digia.com> Reviewed-by: Lars Knoll <lars.knoll@digia.com>
* Move QtQuick profiling to own profiler adapterUlf Hermann2014-02-151-5/+5
| | | | | | | | The QtQuick parts of the QML profiler service thus become a proper global profiler which can be independently enabled and disabled. Change-Id: Ifad03801cab2be66a264fc46fdebdae582fcc99b Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Merge remote-tracking branch 'origin/stable' into devSimon Hausmann2014-02-111-1/+1
|\ | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qv4ssa.cpp src/qml/jsruntime/qv4arrayobject.cpp src/qml/jsruntime/qv4context.cpp Change-Id: Ied5b23bec4dc14abe51127c507aed668f855c1e1
| * Fix backend API, broken since 5.2.0Gunnar Sletta2014-02-041-1/+1
| | | | | | | | | | | | | | | | Without this change, it is not possible to implement a custom context without also implementing a renderloop. Change-Id: Iac2aa732251cdf7221b28f665394cdd336a3d846 Reviewed-by: Michael Brasser <michael.brasser@live.com>
* | Further pack messages for QQmlProfilerServiceUlf Hermann2014-01-221-4/+2
| | | | | | | | | | | | | | | | | | | | | | Allow multiple detailTypes in each packet and extend the profiling code to make use of that. Note that this changes the usual order of pixmapSizeKnown and PixmapLoadingFinished events. As far as I can see this doesn't affect the QML profiler frontend and the order of these events isn't specified anywhere. Change-Id: Id39ad98594ccf35add4415e08daf9e92ab561237 Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
* | Unify calls to profiler service event methods.Ulf Hermann2014-01-221-15/+11
|/ | | | | | | | | | | | Don't needlessly duplicate information about the profiler being available and allow inlining. Use macros to check availability of the profiler in calling code and generally simplify the code. Task-number: QTBUG-35315 Change-Id: I0a9daec4a95f74b9db795ef2918a01fb772ea107 Reviewed-by: Michael Brasser <michael.brasser@live.com> Reviewed-by: Simon Hausmann <simon.hausmann@digia.com> Reviewed-by: Kai Koehne <kai.koehne@digia.com>
* Use qDebug for all debug under src/quick/scenegraph.Gunnar Sletta2014-01-071-1/+2
| | | | | | | Mixing printf and qDebug can make the output come out of sync. Change-Id: Ia71e71b09cb3bf651010eb2eb652db7899b07f0d Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
* Merge remote-tracking branch 'origin/release' into stableFrederik Gladhorn2013-12-121-18/+35
|\ | | | | | | | | | | | | Conflicts: src/qml/qml/qqmlcompiler.cpp Change-Id: I802731139d47c5b733dd805f7bf432d67d7331e1
| * Set the format for the fallback offscreen surfacev5.2.0Laszlo Agocs2013-12-051-0/+1
| | | | | | | | | | | | | | | | | | | | Ie76dbe5fd4ab935db3da34f3ff63d217a3ba5013 fails to set the format for the QOffscreenSurface, resulting in BAD_MATCH failures when trying to make it current. Task-number: QTBUG-35410 Change-Id: I1d420556fad4df96a1893cb3513e398eeb6e71aa Reviewed-by: Lars Knoll <lars.knoll@digia.com>
| * Don't leave the GL context current after cleanup.Gunnar Sletta2013-12-041-18/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When shutting down, we left the gl context current on the window even when it was hidden. On mac this was a problem as it would optimize away our makeCurrent when the surface was made visible again, leading to nothing being rendered. So we call doneCurrent regardless during invalidateGL(). We also check and verify that makeCurrent in invalidateGL() actually succeeds. This lead to another problem which is that closing the app using [x] will call QWindow::destroy() on all windows, removing their platform windows and causing makeCurrent to fail. To still gracefully clean up resources, we introduced the concept of an offscreen fallback surface which is temporarirly used during the cleanup when needed. The problem is still present on QWindow+QOpenGLContext level, and I've opened QTBUG-35363 to fix this. Task-number: QTBUG-35234 Change-Id: Ie76dbe5fd4ab935db3da34f3ff63d217a3ba5013 Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>
* | Don't crash when QCoreApplication is currently being deleted.Sérgio Martins2013-12-121-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In debug mode fixes a crash. The next Q_ASSERT dereferrenced QCoreApplication::instance(). In release mode fixes hundreds of messages about timers: "QObject::startTimer: Timers can only be used with threads started with QThread" A case where this is reproducible is having a QQuickItem that's child of qApp, or in some child hierarchy of qApp. Change-Id: I3b506aefdb537b74dc0d6c755b6874d31be159a1 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* | Mark item as dirty when nodes are cleanedMichael Brasser2013-12-101-0/+2
| | | | | | | | | | | | | | | | Otherwise they may not be recreated in the correct configuration. Change-Id: Ib103b1874d7f104680eae7b6f43f722b5fa93bf2 Done-with: Aaron Kennedy <aaron.kennedy@jollamobile.com> Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* | Merge remote-tracking branch 'origin/release' into stableFrederik Gladhorn2013-12-031-16/+0
|\| | | | | | | Change-Id: I894ad7b4888744833f487b481950c087fa960a5c
| * Revert 99480d5420c0beea6771be582c039b550a4461f5Gunnar Sletta2013-11-271-16/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | The Mac OS X platform plugin has been fixed so that this hack is no longer needed. Not to mention that it breaks on XCB. We keep the warning about bad exposes from the plugin in debug mode. These are still useful for tracking down future bugs. Task-number: QTBUG-35143 Change-Id: I5125f7ae2b7fd77c55e9a29b10aa5434598a9ea9 Reviewed-by: Ulf Hermann <ulf.hermann@digia.com> Reviewed-by: Gabriel de Dietrich <gabriel.dedietrich@digia.com>
* | Fix typo in debug defineGunnar Sletta2013-12-031-1/+1
|/ | | | | Change-Id: I4d024aeb4618228cad3000ddfda32e5c8aba5742 Reviewed-by: Gunnar Sletta <gunnar.sletta@digia.com>
* Stop render thread regardless when the window is being destroyedGunnar Sletta2013-11-251-2/+2
| | | | | | | | | | | | | | | | | | | | | When a window is shown and quickly hidden again we can get to a state, on a asynchronous windowing system API, where the isExposed=true event has been pushed to the event queue but not yet processed at the time the user calls hide(). As hide() immediately sets isVisible() to false, we end up with isExposed=true and isVisible=false which prevent the WM_Obscure event to be sent to render loop which means the render thread thought the window was still on screen when we reched the shutdown in WM_TryRelease. Changed WM_TryRelease handling to disregard window state when the window is being deleted. This forces SG and GL cleanup and stops the thread. Task-number: QTBUG-35055 Change-Id: Ibac5aa27354d6450f30a61450214cb785ab855bf Reviewed-by: J-P Nurmi <jpnurmi@digia.com> Reviewed-by: Laszlo Agocs <laszlo.agocs@digia.com>