Linux: Fixed video freezing after power cycle/reload rom

This commit is contained in:
Sour 2024-01-11 17:51:28 +09:00
parent 9f8c22b434
commit 9af571cac8
4 changed files with 13 additions and 0 deletions

View file

@ -45,5 +45,6 @@ class IRenderingDevice
virtual void ClearFrame() = 0;
virtual void Render(RenderSurfaceInfo& emuHud, RenderSurfaceInfo& scriptHud) = 0;
virtual void Reset() = 0;
virtual void OnRendererThreadStarted() {}
virtual void SetExclusiveFullscreenMode(bool fullscreen, void* windowHandle) = 0;
};

View file

@ -69,6 +69,10 @@ void VideoRenderer::StopThread()
void VideoRenderer::RenderThread()
{
if(_renderer) {
_renderer->OnRendererThreadStarted();
}
while(!_stopFlag.load()) {
//Wait until a frame is ready, or until 32ms have passed (to allow HUD to update at ~30fps when paused)
bool forceRender = _waitForRender.Wait(32);

View file

@ -106,6 +106,13 @@ void SdlRenderer::Cleanup()
}
}
void SdlRenderer::OnRendererThreadStarted()
{
//SDL stops working if the rendering moves to a new thread
//Reset everything to make it work again
Reset();
}
void SdlRenderer::Reset()
{
Cleanup();

View file

@ -66,6 +66,7 @@ public:
void UpdateFrame(RenderedFrame& frame) override;
void Render(RenderSurfaceInfo& emuHud, RenderSurfaceInfo& scriptHud) override;
void Reset() override;
void OnRendererThreadStarted() override;
void SetExclusiveFullscreenMode(bool fullscreen, void* windowHandle) override;
};