Merge pull request #81 from degasus/skip_framelimit_hotkey
Add a hotkey for disabling the framelimit.
This commit is contained in:
commit
557c3db462
|
@ -7,7 +7,7 @@
|
||||||
#include "Common/Atomic.h"
|
#include "Common/Atomic.h"
|
||||||
#include "Common/CPUDetect.h"
|
#include "Common/CPUDetect.h"
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
#include "Core/Host.h"
|
#include "Core/Core.h"
|
||||||
#include "Core/HW/AudioInterface.h"
|
#include "Core/HW/AudioInterface.h"
|
||||||
#include "Core/HW/VideoInterface.h"
|
#include "Core/HW/VideoInterface.h"
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ void CMixer::PushSamples(const short *samples, unsigned int num_samples)
|
||||||
if (*PowerPC::GetStatePtr() != PowerPC::CPU_RUNNING || soundStream->IsMuted())
|
if (*PowerPC::GetStatePtr() != PowerPC::CPU_RUNNING || soundStream->IsMuted())
|
||||||
break;
|
break;
|
||||||
// Shortcut key for Throttle Skipping
|
// Shortcut key for Throttle Skipping
|
||||||
if (Host_GetKeyState('\t'))
|
if (Core::GetIsFramelimiterTempDisabled())
|
||||||
break;
|
break;
|
||||||
SLEEP(1);
|
SLEEP(1);
|
||||||
soundStream->Update();
|
soundStream->Update();
|
||||||
|
|
|
@ -71,6 +71,7 @@ static const struct
|
||||||
{ "ToggleAspectRatio", 0, 0 /* wxMOD_NONE */ },
|
{ "ToggleAspectRatio", 0, 0 /* wxMOD_NONE */ },
|
||||||
{ "ToggleEFBCopies", 0, 0 /* wxMOD_NONE */ },
|
{ "ToggleEFBCopies", 0, 0 /* wxMOD_NONE */ },
|
||||||
{ "ToggleFog", 0, 0 /* wxMOD_NONE */ },
|
{ "ToggleFog", 0, 0 /* wxMOD_NONE */ },
|
||||||
|
{ "ToggleThrottle", 9 /* '\t' */, 0 /* wxMOD_NONE */ },
|
||||||
{ "IncreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
|
{ "IncreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
|
||||||
{ "DecreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
|
{ "DecreaseFrameLimit", 0, 0 /* wxMOD_NONE */ },
|
||||||
{ "LoadStateSlot1", 340 /* WXK_F1 */, 0 /* wxMOD_NONE */ },
|
{ "LoadStateSlot1", 340 /* WXK_F1 */, 0 /* wxMOD_NONE */ },
|
||||||
|
|
|
@ -90,7 +90,17 @@ static bool g_requestRefreshInfo = false;
|
||||||
static int g_pauseAndLockDepth = 0;
|
static int g_pauseAndLockDepth = 0;
|
||||||
|
|
||||||
SCoreStartupParameter g_CoreStartupParameter;
|
SCoreStartupParameter g_CoreStartupParameter;
|
||||||
bool isTabPressed = false;
|
static bool IsFramelimiterTempDisabled = false;
|
||||||
|
|
||||||
|
bool GetIsFramelimiterTempDisabled()
|
||||||
|
{
|
||||||
|
return IsFramelimiterTempDisabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetIsFramelimiterTempDisabled(bool disable)
|
||||||
|
{
|
||||||
|
IsFramelimiterTempDisabled = disable;
|
||||||
|
}
|
||||||
|
|
||||||
std::string GetStateFileName() { return g_stateFileName; }
|
std::string GetStateFileName() { return g_stateFileName; }
|
||||||
void SetStateFileName(std::string val) { g_stateFileName = val; }
|
void SetStateFileName(std::string val) { g_stateFileName = val; }
|
||||||
|
|
|
@ -24,7 +24,8 @@ namespace Core
|
||||||
// TODO: kill, use SConfig instead
|
// TODO: kill, use SConfig instead
|
||||||
extern SCoreStartupParameter g_CoreStartupParameter;
|
extern SCoreStartupParameter g_CoreStartupParameter;
|
||||||
|
|
||||||
extern bool isTabPressed;
|
bool GetIsFramelimiterTempDisabled();
|
||||||
|
void SetIsFramelimiterTempDisabled(bool disable);
|
||||||
|
|
||||||
void Callback_VideoCopiedToXFB(bool video_update);
|
void Callback_VideoCopiedToXFB(bool video_update);
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ enum Hotkey
|
||||||
HK_TOGGLE_AR,
|
HK_TOGGLE_AR,
|
||||||
HK_TOGGLE_EFBCOPIES,
|
HK_TOGGLE_EFBCOPIES,
|
||||||
HK_TOGGLE_FOG,
|
HK_TOGGLE_FOG,
|
||||||
|
HK_TOGGLE_THROTTLE,
|
||||||
|
|
||||||
HK_INCREASE_FRAME_LIMIT,
|
HK_INCREASE_FRAME_LIMIT,
|
||||||
HK_DECREASE_FRAME_LIMIT,
|
HK_DECREASE_FRAME_LIMIT,
|
||||||
|
|
|
@ -62,9 +62,9 @@ IPC_HLE_PERIOD: For the Wiimote this is the call schedule:
|
||||||
#include "Common/Timer.h"
|
#include "Common/Timer.h"
|
||||||
|
|
||||||
#include "Core/ConfigManager.h"
|
#include "Core/ConfigManager.h"
|
||||||
|
#include "Core/Core.h"
|
||||||
#include "Core/CoreTiming.h"
|
#include "Core/CoreTiming.h"
|
||||||
#include "Core/DSPEmulator.h"
|
#include "Core/DSPEmulator.h"
|
||||||
#include "Core/Host.h"
|
|
||||||
#include "Core/PatchEngine.h"
|
#include "Core/PatchEngine.h"
|
||||||
#include "Core/HW/AudioInterface.h"
|
#include "Core/HW/AudioInterface.h"
|
||||||
#include "Core/HW/DSP.h"
|
#include "Core/HW/DSP.h"
|
||||||
|
@ -237,7 +237,8 @@ void ThrottleCallback(u64 last_time, int cyclesLate)
|
||||||
u32 time = Common::Timer::GetTimeMs();
|
u32 time = Common::Timer::GetTimeMs();
|
||||||
|
|
||||||
int diff = (u32)last_time - time;
|
int diff = (u32)last_time - time;
|
||||||
bool frame_limiter = SConfig::GetInstance().m_Framelimit && SConfig::GetInstance().m_Framelimit != 2 && !Host_GetKeyState('\t');
|
const SConfig& config = SConfig::GetInstance();
|
||||||
|
bool frame_limiter = config.m_Framelimit && config.m_Framelimit != 2 && !Core::GetIsFramelimiterTempDisabled();
|
||||||
u32 next_event = GetTicksPerSecond()/1000;
|
u32 next_event = GetTicksPerSecond()/1000;
|
||||||
if (SConfig::GetInstance().m_Framelimit > 2)
|
if (SConfig::GetInstance().m_Framelimit > 2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -25,7 +25,6 @@
|
||||||
|
|
||||||
bool Host_RendererHasFocus();
|
bool Host_RendererHasFocus();
|
||||||
void Host_ConnectWiimote(int wm_idx, bool connect);
|
void Host_ConnectWiimote(int wm_idx, bool connect);
|
||||||
bool Host_GetKeyState(int keycode);
|
|
||||||
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height);
|
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height);
|
||||||
void Host_Message(int Id);
|
void Host_Message(int Id);
|
||||||
void Host_NotifyMapLoaded();
|
void Host_NotifyMapLoaded();
|
||||||
|
|
|
@ -940,6 +940,10 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||||
OSDChoice = 4;
|
OSDChoice = 4;
|
||||||
g_Config.bDisableFog = !g_Config.bDisableFog;
|
g_Config.bDisableFog = !g_Config.bDisableFog;
|
||||||
}
|
}
|
||||||
|
else if (IsHotkey(event, HK_TOGGLE_THROTTLE))
|
||||||
|
{
|
||||||
|
Core::SetIsFramelimiterTempDisabled(true);
|
||||||
|
}
|
||||||
else if (IsHotkey(event, HK_INCREASE_FRAME_LIMIT))
|
else if (IsHotkey(event, HK_INCREASE_FRAME_LIMIT))
|
||||||
{
|
{
|
||||||
if (++SConfig::GetInstance().m_Framelimit > 0x19)
|
if (++SConfig::GetInstance().m_Framelimit > 0x19)
|
||||||
|
@ -1040,7 +1044,18 @@ void CFrame::OnKeyDown(wxKeyEvent& event)
|
||||||
|
|
||||||
void CFrame::OnKeyUp(wxKeyEvent& event)
|
void CFrame::OnKeyUp(wxKeyEvent& event)
|
||||||
{
|
{
|
||||||
|
if(Core::GetState() != Core::CORE_UNINITIALIZED &&
|
||||||
|
(RendererHasFocus() || TASInputHasFocus()))
|
||||||
|
{
|
||||||
|
if (IsHotkey(event, HK_TOGGLE_THROTTLE))
|
||||||
|
{
|
||||||
|
Core::SetIsFramelimiterTempDisabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFrame::OnMouse(wxMouseEvent& event)
|
void CFrame::OnMouse(wxMouseEvent& event)
|
||||||
|
|
|
@ -233,6 +233,7 @@ void HotkeyConfigDialog::CreateHotkeyGUIControls(void)
|
||||||
_("Toggle Aspect Ratio"),
|
_("Toggle Aspect Ratio"),
|
||||||
_("Toggle EFB Copies"),
|
_("Toggle EFB Copies"),
|
||||||
_("Toggle Fog"),
|
_("Toggle Fog"),
|
||||||
|
_("Toggle Frame limit"),
|
||||||
_("Increase Frame limit"),
|
_("Increase Frame limit"),
|
||||||
_("Decrease Frame limit"),
|
_("Decrease Frame limit"),
|
||||||
|
|
||||||
|
|
|
@ -620,25 +620,6 @@ void Host_UpdateBreakPointView()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Host_GetKeyState(int keycode)
|
|
||||||
{
|
|
||||||
#ifdef _WIN32
|
|
||||||
return (0 != GetAsyncKeyState(keycode));
|
|
||||||
#elif defined __WXGTK__
|
|
||||||
std::unique_lock<std::recursive_mutex> lk(main_frame->keystate_lock, std::try_to_lock);
|
|
||||||
if (!lk.owns_lock())
|
|
||||||
return false;
|
|
||||||
|
|
||||||
bool key_pressed;
|
|
||||||
if (!wxIsMainThread()) wxMutexGuiEnter();
|
|
||||||
key_pressed = wxGetKeyState(wxKeyCode(keycode));
|
|
||||||
if (!wxIsMainThread()) wxMutexGuiLeave();
|
|
||||||
return key_pressed;
|
|
||||||
#else
|
|
||||||
return wxGetKeyState(wxKeyCode(keycode));
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
||||||
{
|
{
|
||||||
main_frame->GetRenderWindowSize(x, y, width, height);
|
main_frame->GetRenderWindowSize(x, y, width, height);
|
||||||
|
|
|
@ -85,11 +85,6 @@ void Host_UpdateMainFrame()
|
||||||
|
|
||||||
void Host_UpdateBreakPointView(){}
|
void Host_UpdateBreakPointView(){}
|
||||||
|
|
||||||
bool Host_GetKeyState(int keycode)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
||||||
{
|
{
|
||||||
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
|
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
|
||||||
|
|
|
@ -79,11 +79,6 @@ void Host_UpdateMainFrame()
|
||||||
|
|
||||||
void Host_UpdateBreakPointView(){}
|
void Host_UpdateBreakPointView(){}
|
||||||
|
|
||||||
bool Host_GetKeyState(int keycode)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
void Host_GetRenderWindowSize(int& x, int& y, int& width, int& height)
|
||||||
{
|
{
|
||||||
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
|
x = SConfig::GetInstance().m_LocalCoreStartupParameter.iRenderWindowXPos;
|
||||||
|
|
|
@ -276,5 +276,5 @@ void VideoConfig::Save(const std::string& ini_file)
|
||||||
|
|
||||||
bool VideoConfig::IsVSync()
|
bool VideoConfig::IsVSync()
|
||||||
{
|
{
|
||||||
return Core::isTabPressed ? false : bVSync;
|
return bVSync && !Core::GetIsFramelimiterTempDisabled();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue