From 64ec56bf892efa85d3c1cb83db9a0fd95547275f Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Fri, 19 Feb 2016 15:36:51 -0800 Subject: [PATCH] Guards and warnings in QML rendering --- libraries/gl/src/gl/OffscreenQmlSurface.cpp | 14 ++++++++++---- libraries/gl/src/gl/OffscreenQmlSurface.h | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 42eea08057..e22feb694d 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -175,6 +175,7 @@ private: doneCurrent(); getContextObject()->moveToThread(QCoreApplication::instance()->thread()); + _thread.quit(); _cond.wakeOne(); } @@ -228,7 +229,7 @@ private: _quickWindow->setRenderTarget(GetName(*_fbo), QSize(_size.x, _size.y)); - { + try { PROFILE_RANGE("qml_render") TexturePtr texture = _textures.getNextTexture(); _fbo->Bind(Framebuffer::Target::Draw); @@ -245,8 +246,10 @@ private: DefaultFramebuffer().Bind(Framebuffer::Target::Draw); _quickWindow->resetOpenGLState(); _escrow.submit(GetName(*texture)); + _lastRenderTime = usecTimestampNow(); + } catch (std::runtime_error& error) { + qWarning() << "Failed to render QML " << error.what(); } - _lastRenderTime = usecTimestampNow(); } void aboutToQuit() { @@ -321,7 +324,7 @@ OffscreenQmlSurface::~OffscreenQmlSurface() { void OffscreenQmlSurface::create(QOpenGLContext* shareContext) { _renderer = new OffscreenQmlRenderer(this, shareContext); - + _renderer->_renderControl->_renderWindow = _proxyWindow; // Create a QML engine. _qmlEngine = new QQmlEngine; if (!_qmlEngine->incubationController()) { @@ -610,7 +613,10 @@ bool OffscreenQmlSurface::isPaused() const { } void OffscreenQmlSurface::setProxyWindow(QWindow* window) { - _renderer->_renderControl->_renderWindow = window; + _proxyWindow = window; + if (_renderer && _renderer->_renderControl) { + _renderer->_renderControl->_renderWindow = window; + } } QObject* OffscreenQmlSurface::getEventHandler() { diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.h b/libraries/gl/src/gl/OffscreenQmlSurface.h index 9e3ee06f92..5641d16a30 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.h +++ b/libraries/gl/src/gl/OffscreenQmlSurface.h @@ -95,7 +95,7 @@ private: bool _paused{ true }; uint8_t _maxFps{ 60 }; MouseTranslator _mouseTranslator{ [](const QPointF& p) { return p.toPoint(); } }; - + QWindow* _proxyWindow { nullptr }; }; #endif