System: Restore/reset state on recreating GPU/updating settings
Fixes display corruption on RetroArch when switching renderers.
This commit is contained in:
@ -222,6 +222,8 @@ ConsoleRegion GetConsoleRegionForDiscRegion(DiscRegion region)
|
||||
|
||||
bool RecreateGPU(GPURenderer renderer)
|
||||
{
|
||||
g_gpu->RestoreGraphicsAPIState();
|
||||
|
||||
// save current state
|
||||
std::unique_ptr<ByteStream> state_stream = ByteStream_CreateGrowableMemoryStream();
|
||||
StateWrapper sw(state_stream.get(), StateWrapper::Mode::Write);
|
||||
@ -229,6 +231,8 @@ bool RecreateGPU(GPURenderer renderer)
|
||||
if (!state_valid)
|
||||
Log_ErrorPrintf("Failed to save old GPU state when switching renderers");
|
||||
|
||||
g_gpu->ResetGraphicsAPIState();
|
||||
|
||||
// create new renderer
|
||||
g_gpu.reset();
|
||||
if (!CreateGPU(renderer))
|
||||
@ -241,8 +245,10 @@ bool RecreateGPU(GPURenderer renderer)
|
||||
{
|
||||
state_stream->SeekAbsolute(0);
|
||||
sw.SetMode(StateWrapper::Mode::Read);
|
||||
g_gpu->RestoreGraphicsAPIState();
|
||||
g_gpu->DoState(sw);
|
||||
TimingEvents::DoState(sw, TimingEvents::GetGlobalTickCounter());
|
||||
g_gpu->ResetGraphicsAPIState();
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user