diff --git a/CHANGES b/CHANGES index 775826662..753dc555e 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,7 @@ Other fixes: - GBA e-Reader: Fix bitmap short strip scanning - GBA Video: Fix mode 5 frame 1 caching (fixes mgba.io/i/2075) - GBA Video: Don't attempt to copy invalid registers when switching renderer + - Qt: Fix crash when switching from high-resolution OpenGL renderer to software Misc: - Core: Truncate preloading ROMs that slightly exceed max size (fixes mgba.io/i/2093) - GBA: Default-enable VBA bug compat for Ruby and Emerald ROM hacks diff --git a/src/platform/qt/DisplayGL.cpp b/src/platform/qt/DisplayGL.cpp index 2838992f9..c30cba9f5 100644 --- a/src/platform/qt/DisplayGL.cpp +++ b/src/platform/qt/DisplayGL.cpp @@ -368,6 +368,10 @@ void PainterGL::resizeContext() { m_interrupter.resume(); QSize size = m_context->screenDimensions(); + if (m_dims == size) { + return; + } + dequeueAll(); m_backend->setDimensions(m_backend, size.width(), size.height()); } @@ -560,9 +564,6 @@ void PainterGL::dequeueAll() { m_free.append(buffer); } } - if (buffer) { - m_backend->postFrame(m_backend, buffer); - } if (m_buffer) { m_free.append(m_buffer); m_buffer = nullptr; diff --git a/src/platform/qt/DisplayGL.h b/src/platform/qt/DisplayGL.h index a9ec10945..111f0cc88 100644 --- a/src/platform/qt/DisplayGL.h +++ b/src/platform/qt/DisplayGL.h @@ -142,7 +142,7 @@ private: QList m_free; QQueue m_queue; QAtomicInt m_lagging = 0; - uint32_t* m_buffer; + uint32_t* m_buffer = nullptr; QPainter m_painter; QMutex m_mutex; QWindow* m_surface; @@ -158,6 +158,7 @@ private: VideoShader m_shader{}; VideoBackend* m_backend = nullptr; QSize m_size; + QSize m_dims; MessagePainter* m_messagePainter = nullptr; QElapsedTimer m_delayTimer; std::shared_ptr m_videoProxy;