Qt: Fix display not updating after resize when paused

Fixes #104.
This commit is contained in:
Connor McLaughlin 2020-03-18 22:27:45 +10:00
parent b86e0bc846
commit afe2f96474
3 changed files with 22 additions and 12 deletions

View File

@ -24,8 +24,6 @@ public:
virtual bool initializeDeviceContext(bool debug_device);
virtual void destroyDeviceContext();
virtual void Render() = 0;
// this comes back on the emu thread
virtual void windowResized(s32 new_window_width, s32 new_window_height);

View File

@ -214,8 +214,14 @@ void QtHostInterface::handleKeyEvent(int key, bool pressed)
void QtHostInterface::onDisplayWidgetResized(int width, int height)
{
// this can be null if it was destroyed and the main thread is late catching up
if (m_display_widget)
m_display_widget->windowResized(width, height);
if (!m_display_widget)
return;
m_display_widget->windowResized(width, height);
// re-render the display, since otherwise it will be out of date and stretched if paused
if (m_system)
renderDisplay();
}
bool QtHostInterface::AcquireHostDisplay()
@ -699,14 +705,7 @@ void QtHostInterface::threadEntryPoint()
m_system->RunFrame();
m_system->GetGPU()->ResetGraphicsAPIState();
DrawDebugWindows();
DrawOSDMessages();
m_display->Render();
m_system->GetGPU()->RestoreGraphicsAPIState();
renderDisplay();
if (m_speed_limiter_enabled)
m_system->Throttle();
@ -727,6 +726,18 @@ void QtHostInterface::threadEntryPoint()
moveToThread(m_original_thread);
}
void QtHostInterface::renderDisplay()
{
m_system->GetGPU()->ResetGraphicsAPIState();
DrawDebugWindows();
DrawOSDMessages();
m_display->Render();
m_system->GetGPU()->RestoreGraphicsAPIState();
}
void QtHostInterface::wakeThread()
{
if (isOnWorkerThread())

View File

@ -157,6 +157,7 @@ private:
void createThread();
void stopThread();
void threadEntryPoint();
void renderDisplay();
void wakeThread();
QSettings m_qsettings;