diff --git a/interface/src/ui/ResourceImageItem.cpp b/interface/src/ui/ResourceImageItem.cpp index 9b5595c6ed..d7ad793bb8 100644 --- a/interface/src/ui/ResourceImageItem.cpp +++ b/interface/src/ui/ResourceImageItem.cpp @@ -32,13 +32,17 @@ void ResourceImageItem::setReady(bool ready) { } void ResourceImageItemRenderer::onUpdateTimer() { - if (_ready && _networkTexture && _networkTexture->isLoaded()) { - if(_fboMutex.tryLock()) { - invalidateFramebufferObject(); - qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); - _fboMutex.unlock(); + if (_ready) { + if (_networkTexture && _networkTexture->isLoaded()) { + if(_fboMutex.tryLock()) { + invalidateFramebufferObject(); + qApp->getActiveDisplayPlugin()->copyTextureToQuickFramebuffer(_networkTexture, _copyFbo, &_fenceSync); + _fboMutex.unlock(); + } else { + qDebug() << "couldn't get a lock, using last frame"; + } } else { - qDebug() << "couldn't get a lock, using last frame"; + _networkTexture = DependencyManager::get()->getTexture(_url); } } update(); @@ -76,6 +80,9 @@ void ResourceImageItemRenderer::synchronize(QQuickFramebufferObject* item) { } QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(const QSize& size) { + if (_copyFbo) { + delete _copyFbo; + } QOpenGLFramebufferObjectFormat format; format.setAttachment(QOpenGLFramebufferObject::CombinedDepthStencil); _copyFbo = new QOpenGLFramebufferObject(size, format); @@ -85,26 +92,25 @@ QOpenGLFramebufferObject* ResourceImageItemRenderer::createFramebufferObject(con void ResourceImageItemRenderer::render() { auto f = QOpenGLContext::currentContext()->extraFunctions(); - bool doUpdate = false; - // black background - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); if (_fenceSync) { f->glWaitSync(_fenceSync, 0, GL_TIMEOUT_IGNORED); f->glDeleteSync(_fenceSync); _fenceSync = 0; - doUpdate = true; } if (_ready) { _fboMutex.lock(); _copyFbo->bind(); QOpenGLFramebufferObject::blitFramebuffer(framebufferObject(), _copyFbo, GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT, GL_NEAREST); + + // this clears the copyFbo texture + // so next frame starts fresh - helps + // when aspect ratio changes + _copyFbo->takeTexture(); + _copyFbo->bind(); _copyFbo->release(); + _fboMutex.unlock(); - if (doUpdate) { - update(); - } } glFlush(); _window->resetOpenGLState(); diff --git a/interface/src/ui/ResourceImageItem.h b/interface/src/ui/ResourceImageItem.h index 2d6e2cf625..39cae44ed0 100644 --- a/interface/src/ui/ResourceImageItem.h +++ b/interface/src/ui/ResourceImageItem.h @@ -34,7 +34,7 @@ private: NetworkTexturePointer _networkTexture; QQuickWindow* _window; QMutex _fboMutex; - QOpenGLFramebufferObject* _copyFbo; + QOpenGLFramebufferObject* _copyFbo { nullptr }; GLsync _fenceSync { 0 }; QTimer _updateTimer; public slots: