mirror of https://github.com/PCSX2/pcsx2.git
Merge pull request #611 from turtleli/fix-toggling
Fix renderer toggling behavior and other related stuff
This commit is contained in:
commit
59a66f87c3
|
@ -179,6 +179,8 @@ static void dummyIrqCallback()
|
||||||
|
|
||||||
void SysMtgsThread::OpenPlugin()
|
void SysMtgsThread::OpenPlugin()
|
||||||
{
|
{
|
||||||
|
static bool stored_renderswitch = false;
|
||||||
|
|
||||||
if( m_PluginOpened ) return;
|
if( m_PluginOpened ) return;
|
||||||
|
|
||||||
memcpy( RingBuffer.Regs, PS2MEM_GS, sizeof(PS2MEM_GS) );
|
memcpy( RingBuffer.Regs, PS2MEM_GS, sizeof(PS2MEM_GS) );
|
||||||
|
@ -192,25 +194,14 @@ void SysMtgsThread::OpenPlugin()
|
||||||
else
|
else
|
||||||
result = GSopen( (void*)pDsp, "PCSX2", renderswitch ? 2 : 1 );
|
result = GSopen( (void*)pDsp, "PCSX2", renderswitch ? 2 : 1 );
|
||||||
|
|
||||||
// Vsync on / off ?
|
if( stored_renderswitch != renderswitch )
|
||||||
if( renderswitch )
|
|
||||||
{
|
{
|
||||||
|
stored_renderswitch = renderswitch;
|
||||||
Console.Indent(2).WriteLn( "Toggling GSdx Hardware/Software renderer" );
|
Console.Indent(2).WriteLn( "Toggling GSdx Hardware/Software renderer" );
|
||||||
if ( EmuConfig.GS.VsyncEnable )
|
|
||||||
{
|
|
||||||
// Better turn Vsync off now, as in most cases sw rendering is not fast enough to support a steady 60fps.
|
|
||||||
// Having Vsync still enabled then means a big cut in speed and sloppy rendering.
|
|
||||||
// It's possible though that some users have very fast machines, and rather kept Vsync enabled,
|
|
||||||
// but let's assume this is the minority. At least for now ;)
|
|
||||||
GSsetVsync( false );
|
|
||||||
Console.Indent(2).WriteLn( "Vsync temporarily disabled" );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
GSsetVsync( EmuConfig.GS.FrameLimitEnable && EmuConfig.GS.VsyncEnable );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GSsetVsync(EmuConfig.GS.FrameLimitEnable && EmuConfig.GS.VsyncEnable);
|
||||||
|
|
||||||
if( result != 0 )
|
if( result != 0 )
|
||||||
{
|
{
|
||||||
DevCon.WriteLn( "GSopen Failed: return code: 0x%x", result );
|
DevCon.WriteLn( "GSopen Failed: return code: 0x%x", result );
|
||||||
|
|
|
@ -445,17 +445,24 @@ static int _GSopen(void** dsp, char* title, int renderer, int threads = -1)
|
||||||
|
|
||||||
EXPORT_C_(int) GSopen2(void** dsp, uint32 flags)
|
EXPORT_C_(int) GSopen2(void** dsp, uint32 flags)
|
||||||
{
|
{
|
||||||
#ifdef __linux__
|
static bool stored_toggle_state = false;
|
||||||
// Use ogl renderer as default otherwise it crash at startup
|
bool toggle_state = !!(flags & 4);
|
||||||
// GSRenderOGL only GSDeviceOGL (not GSDeviceNULL)
|
|
||||||
int renderer = theApp.GetConfig("Renderer", 12);
|
|
||||||
#else
|
|
||||||
int renderer = theApp.GetConfig("Renderer", 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(flags & 4)
|
int renderer = s_renderer;
|
||||||
|
// Fresh start up or config file changed
|
||||||
|
if (renderer == -1)
|
||||||
{
|
{
|
||||||
#ifdef _WINDOWS
|
#ifdef __linux__
|
||||||
|
// Use ogl renderer as default otherwise it crash at startup
|
||||||
|
// GSRenderOGL only GSDeviceOGL (not GSDeviceNULL)
|
||||||
|
renderer = theApp.GetConfig("Renderer", 12);
|
||||||
|
#else
|
||||||
|
renderer = theApp.GetConfig("Renderer", 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else if (stored_toggle_state != toggle_state)
|
||||||
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
int best_sw_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? 4 : 1; // dx11 / dx9 sw
|
int best_sw_renderer = GSUtil::CheckDirect3D11Level() >= D3D_FEATURE_LEVEL_10_0 ? 4 : 1; // dx11 / dx9 sw
|
||||||
|
|
||||||
switch(renderer){
|
switch(renderer){
|
||||||
|
@ -477,6 +484,7 @@ EXPORT_C_(int) GSopen2(void** dsp, uint32 flags)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
stored_toggle_state = toggle_state;
|
||||||
|
|
||||||
int retval = _GSopen(dsp, NULL, renderer);
|
int retval = _GSopen(dsp, NULL, renderer);
|
||||||
|
|
||||||
|
@ -761,17 +769,19 @@ EXPORT_C GSconfigure()
|
||||||
|
|
||||||
GSshutdown();
|
GSshutdown();
|
||||||
}
|
}
|
||||||
|
// Force a reload of the gs state
|
||||||
|
s_renderer = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
if (RunLinuxDialog()) {
|
if (RunLinuxDialog()) {
|
||||||
theApp.ReloadConfig();
|
theApp.ReloadConfig();
|
||||||
|
// Force a reload of the gs state
|
||||||
|
s_renderer = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// Force a reload of the gs state
|
|
||||||
s_renderer = -1;
|
|
||||||
|
|
||||||
} catch (GSDXRecoverableError)
|
} catch (GSDXRecoverableError)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue