diff --git a/OSBindings/Qt/scantargetwidget.cpp b/OSBindings/Qt/scantargetwidget.cpp index 1975d8a4a..4d2804008 100644 --- a/OSBindings/Qt/scantargetwidget.cpp +++ b/OSBindings/Qt/scantargetwidget.cpp @@ -21,6 +21,14 @@ void ScanTargetWidget::initializeGL() { void ScanTargetWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT); if(isConnected) { + // Qt reserves the right to change the framebuffer object due to window resizes or if setParent is called; + // therefore check whether it has changed. + const auto newFramebuffer = defaultFramebufferObject(); + if(framebuffer != newFramebuffer) { + framebuffer = newFramebuffer; + scanTarget->set_target_framebuffer(framebuffer); + } + vsyncPredictor.begin_redraw(); scanTarget->update(width(), height()); scanTarget->draw(width(), height()); @@ -41,14 +49,15 @@ void ScanTargetWidget::vsync() { } void ScanTargetWidget::resizeGL(int w, int h) { - glViewport(0,0,w,h); + glViewport(0, 0, w, h); } Outputs::Display::OpenGL::ScanTarget *ScanTargetWidget::getScanTarget() { makeCurrent(); if(!scanTarget) { isConnected = true; - scanTarget = std::make_unique(defaultFramebufferObject()); + framebuffer = defaultFramebufferObject(); + scanTarget = std::make_unique(framebuffer); } return scanTarget.get(); } diff --git a/OSBindings/Qt/scantargetwidget.h b/OSBindings/Qt/scantargetwidget.h index e8b569df0..e3204707e 100644 --- a/OSBindings/Qt/scantargetwidget.h +++ b/OSBindings/Qt/scantargetwidget.h @@ -25,6 +25,7 @@ class ScanTargetWidget : public QOpenGLWidget std::unique_ptr scanTarget; Time::VSyncPredictor vsyncPredictor; bool isConnected = false; + GLuint framebuffer = 0; private slots: void vsync();