diff options
| -rw-r--r-- | Source/Core/Core/Src/CoreParameter.h | 6 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/Jit64/JitCache.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp | 18 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/CodeWindow.cpp | 97 | ||||
| -rw-r--r-- | Source/Core/DebuggerWX/Src/CodeWindow.h | 23 | ||||
| -rw-r--r-- | Source/Core/DolphinWX/Src/Frame.cpp | 7 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp | 18 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp | 1 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h | 8 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp | 662 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp | 2 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/Config.cpp | 2 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/Config.h | 2 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp | 24 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h | 4 | ||||
| -rw-r--r-- | Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp | 11 |
16 files changed, 492 insertions, 411 deletions
diff --git a/Source/Core/Core/Src/CoreParameter.h b/Source/Core/Core/Src/CoreParameter.h index e631a20b9a..39a651f078 100644 --- a/Source/Core/Core/Src/CoreParameter.h +++ b/Source/Core/Core/Src/CoreParameter.h @@ -37,14 +37,16 @@ struct SCoreStartupParameter // flags
bool bEnableDebugging;
bool bUseJIT;
- bool bJITOff;
- bool bJITLoadStoreOff;
+
+ bool bJITUnlimitedCache, bJITOff; // JIT
+ bool bJITLoadStoreOff, bJITLoadStorelXzOff, bJITLoadStorelwzOff, bJITLoadStorelbzxOff;
bool bJITLoadStoreFloatingOff;
bool bJITLoadStorePairedOff;
bool bJITFloatingPointOff;
bool bJITIntegerOff;
bool bJITPairedOff;
bool bJITSystemRegistersOff;
+
bool bUseDualCore;
bool bSkipIdle;
bool bNTSC;
diff --git a/Source/Core/Core/Src/PowerPC/Jit64/JitCache.cpp b/Source/Core/Core/Src/PowerPC/Jit64/JitCache.cpp index b4f5f88a9e..4217f9b6c4 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/JitCache.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/JitCache.cpp @@ -50,11 +50,13 @@ namespace Jit64 enum
{
- CODE_SIZE = 1024*1024*8,
+ //CODE_SIZE = 1024*1024*8,
GEN_SIZE = 4096,
TRAMPOLINE_SIZE = 1024*1024,
- MAX_NUM_BLOCKS = 65536,
+ //MAX_NUM_BLOCKS = 65536,
};
+ int CODE_SIZE = 1024*1024*8; // nonconstant to be able to have an option for it
+ int MAX_NUM_BLOCKS = 65536;
static u8 **blockCodePointers; // cut these in half and force below 2GB?
@@ -75,6 +77,12 @@ namespace Jit64 void InitCache()
{
+ if(Core::g_CoreStartupParameter.bJITUnlimitedCache)
+ {
+ CODE_SIZE *= 8;
+ MAX_NUM_BLOCKS *= 8;
+ }
+
codeCache = (u8*)AllocateExecutableMemory(CODE_SIZE);
genFunctions = (u8*)AllocateExecutableMemory(GEN_SIZE);
trampolineCache = (u8*)AllocateExecutableMemory(TRAMPOLINE_SIZE);
@@ -103,6 +111,8 @@ namespace Jit64 numBlocks = 0;
}
+ /* This clears the JIT cache. It's called from JitCache.cpp when the JIT cache
+ is full and when saving and loading states */
void ClearCache()
{
Core::DisplayMessage("Cleared code cache.", 3000);
@@ -165,6 +175,10 @@ namespace Jit64 if (GetCodePtr() >= codeCache + CODE_SIZE - 0x10000 || numBlocks >= MAX_NUM_BLOCKS - 1)
{
LOG(DYNA_REC, "JIT cache full - clearing.")
+ if(Core::g_CoreStartupParameter.bJITUnlimitedCache)
+ {
+ PanicAlert("What? JIT cache still full - clearing.");
+ }
ClearCache();
}
diff --git a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp index 9213059a70..773e185e13 100644 --- a/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp +++ b/Source/Core/Core/Src/PowerPC/Jit64/Jit_LoadStore.cpp @@ -55,7 +55,8 @@ namespace Jit64 void lbzx(UGeckoInstruction inst)
{
#ifdef JIT_OFF_OPTIONS
- if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff)
+ if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff
+ || Core::g_CoreStartupParameter.bJITLoadStorelbzxOff)
{Default(inst); return;} // turn off from debugger
#endif
INSTRUCTION_START;
@@ -80,11 +81,12 @@ namespace Jit64 void lXz(UGeckoInstruction inst)
{
#ifdef JIT_OFF_OPTIONS
- if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff)
+ if(Core::g_CoreStartupParameter.bJITOff || Core::g_CoreStartupParameter.bJITLoadStoreOff
+ || Core::g_CoreStartupParameter.bJITLoadStorelXzOff)
{Default(inst); return;} // turn off from debugger
#endif
INSTRUCTION_START;
-
+
int d = inst.RD;
int a = inst.RA;
@@ -125,10 +127,16 @@ namespace Jit64 int accessSize;
switch (inst.OPCD)
{
- case 32: accessSize = 32; break; //lwz
+ case 32:
+ accessSize = 32;
+ if(Core::g_CoreStartupParameter.bJITLoadStorelwzOff) {Default(inst); return;}
+ break; //lwz
case 40: accessSize = 16; break; //lhz
case 34: accessSize = 8; break; //lbz
- default: _assert_msg_(DYNA_REC, 0, "lXz: invalid access size"); return;
+ default:
+ //_assert_msg_(DYNA_REC, 0, "lXz: invalid access size");
+ PanicAlert("lXz: invalid access size");
+ return;
}
//Still here? Do regular path.
diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.cpp b/Source/Core/DebuggerWX/Src/CodeWindow.cpp index 4c0a65f6c0..4a66620ef0 100644 --- a/Source/Core/DebuggerWX/Src/CodeWindow.cpp +++ b/Source/Core/DebuggerWX/Src/CodeWindow.cpp @@ -92,14 +92,18 @@ BEGIN_EVENT_TABLE(CCodeWindow, wxFrame) EVT_MENU(IDM_VIDEOWINDOW, CCodeWindow::OnToggleVideoWindow)
EVT_MENU(IDM_INTERPRETER, CCodeWindow::OnInterpreter) // CPU Mode
+ EVT_MENU(IDM_JITUNLIMITED, CCodeWindow::OnJITOff)
EVT_MENU(IDM_JITOFF, CCodeWindow::OnJITOff)
- EVT_MENU(IDM_JITLSOFF, CCodeWindow::OnJITLSOff)
- EVT_MENU(IDM_JITLSFOFF, CCodeWindow::OnJITLSFOff)
- EVT_MENU(IDM_JITLSPOFF, CCodeWindow::OnJITLSPOff)
- EVT_MENU(IDM_JITFPOFF, CCodeWindow::OnJITFPOff)
- EVT_MENU(IDM_JITIOFF, CCodeWindow::OnJITIOff)
- EVT_MENU(IDM_JITPOFF, CCodeWindow::OnJITPOff)
- EVT_MENU(IDM_JITSROFF, CCodeWindow::OnJITSROff)
+ EVT_MENU(IDM_JITLSOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITLSLXZOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITLSLWZOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITLSLBZXOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITLSFOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITLSPOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITFPOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITIOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITPOFF, CCodeWindow::OnJITOff)
+ EVT_MENU(IDM_JITSROFF, CCodeWindow::OnJITOff)
EVT_MENU(IDM_CLEARSYMBOLS, CCodeWindow::OnSymbolsMenu)
EVT_MENU(IDM_LOADMAPFILE, CCodeWindow::OnSymbolsMenu)
@@ -335,29 +339,19 @@ void CCodeWindow::CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParam pCoreMenu->AppendSeparator();
#ifdef JIT_OFF_OPTIONS
+ jitunlimited = pCoreMenu->Append(IDM_JITUNLIMITED, _T("&Unlimited JIT Cache"), wxEmptyString, wxITEM_CHECK);
+ pCoreMenu->AppendSeparator();
jitoff = pCoreMenu->Append(IDM_JITOFF, _T("&JIT off (JIT core)"), wxEmptyString, wxITEM_CHECK);
- jitoff->Check(_LocalCoreStartupParameter.bJITOff);
-
jitlsoff = pCoreMenu->Append(IDM_JITLSOFF, _T("&JIT LoadStore off"), wxEmptyString, wxITEM_CHECK);
- jitlsoff->Check(_LocalCoreStartupParameter.bJITLoadStoreOff);
-
+ jitlslbzxoff = pCoreMenu->Append(IDM_JITLSLBZXOFF, _T(" &JIT LoadStore lbzx off"), wxEmptyString, wxITEM_CHECK);
+ jitlslxzoff = pCoreMenu->Append(IDM_JITLSLXZOFF, _T(" &JIT LoadStore lXz off"), wxEmptyString, wxITEM_CHECK);
+ jitlslwzoff = pCoreMenu->Append(IDM_JITLSLWZOFF, _T(" &JIT LoadStore lwz off"), wxEmptyString, wxITEM_CHECK);
jitlspoff = pCoreMenu->Append(IDM_JITLSFOFF, _T("&JIT LoadStore Floating off"), wxEmptyString, wxITEM_CHECK);
- jitlspoff->Check(_LocalCoreStartupParameter.bJITLoadStoreFloatingOff);
-
jitlsfoff = pCoreMenu->Append(IDM_JITLSPOFF, _T("&JIT LoadStore Paired off"), wxEmptyString, wxITEM_CHECK);
- jitlsfoff->Check(_LocalCoreStartupParameter.bJITLoadStorePairedOff);
-
jitfpoff = pCoreMenu->Append(IDM_JITFPOFF, _T("&JIT FloatingPoint off"), wxEmptyString, wxITEM_CHECK);
- jitfpoff->Check(_LocalCoreStartupParameter.bJITFloatingPointOff);
-
jitioff = pCoreMenu->Append(IDM_JITIOFF, _T("&JIT Integer off"), wxEmptyString, wxITEM_CHECK);
- jitioff->Check(_LocalCoreStartupParameter.bJITIntegerOff);
-
jitpoff = pCoreMenu->Append(IDM_JITPOFF, _T("&JIT Paired off"), wxEmptyString, wxITEM_CHECK);
- jitpoff->Check(_LocalCoreStartupParameter.bJITPairedOff);
-
jitsroff = pCoreMenu->Append(IDM_JITSROFF, _T("&JIT SystemRegisters off"), wxEmptyString, wxITEM_CHECK);
- jitsroff->Check(_LocalCoreStartupParameter.bJITSystemRegistersOff);
#endif
// wxMenuItem* dualcore = pDebugMenu->Append(IDM_DUALCORE, _T("&DualCore"), wxEmptyString, wxITEM_CHECK);
@@ -459,43 +453,58 @@ void CCodeWindow::OnInterpreter(wxCommandEvent& event) wxMessageBox(_T("Please pause the emulator before changing mode."));
}
}
-void CCodeWindow::DoJITOff(wxCommandEvent& event, wxMenuItem* a, bool& b)
+
+
+void CCodeWindow::OnJITOff(wxCommandEvent& event)
{
if (Core::GetState() == Core::CORE_UNINITIALIZED)
{
// we disallow changing the status here because it will be reset to the defult when BootCore()
// creates the SCoreStartupParameter as a game is loaded
- a->Check(!a->IsChecked());
+ GetMenuBar()->Check(event.GetId(),!event.IsChecked());
wxMessageBox(_T("Please start a game before changing mode."));
} else {
if (Core::GetState() != Core::CORE_RUN)
{
- b = !b;
+ switch (event.GetId())
+ {
+ case IDM_JITUNLIMITED:
+ Core::g_CoreStartupParameter.bJITUnlimitedCache = event.IsChecked();
+ Jit64::ClearCache(); // allow InitCache() even after the game has started
+ Jit64::InitCache();
+ GetMenuBar()->Enable(event.GetId(),!event.IsChecked());
+ break;
+ case IDM_JITOFF:
+ Core::g_CoreStartupParameter.bJITOff = event.IsChecked(); break;
+ case IDM_JITLSOFF:
+ Core::g_CoreStartupParameter.bJITLoadStoreOff = event.IsChecked(); break;
+ case IDM_JITLSLXZOFF:
+ Core::g_CoreStartupParameter.bJITLoadStorelXzOff = event.IsChecked(); break;
+ case IDM_JITLSLWZOFF:
+ Core::g_CoreStartupParameter.bJITLoadStorelwzOff = event.IsChecked(); break;
+ case IDM_JITLSLBZXOFF:
+ Core::g_CoreStartupParameter.bJITLoadStorelbzxOff = event.IsChecked(); break;
+ case IDM_JITLSFOFF:
+ Core::g_CoreStartupParameter.bJITLoadStoreFloatingOff = event.IsChecked(); break;
+ case IDM_JITLSPOFF:
+ Core::g_CoreStartupParameter.bJITLoadStorePairedOff = event.IsChecked(); break;
+ case IDM_JITFPOFF:
+ Core::g_CoreStartupParameter.bJITFloatingPointOff = event.IsChecked(); break;
+ case IDM_JITIOFF:
+ Core::g_CoreStartupParameter.bJITIntegerOff = event.IsChecked(); break;
+ case IDM_JITPOFF:
+ Core::g_CoreStartupParameter.bJITPairedOff = event.IsChecked(); break;
+ case IDM_JITSROFF:
+ Core::g_CoreStartupParameter.bJITSystemRegistersOff = event.IsChecked(); break;
+ }
Jit64::ClearCache();
} else {
//event.Skip(); // this doesn't work
- a->Check(!a->IsChecked());
+ GetMenuBar()->Check(event.GetId(),!event.IsChecked());
wxMessageBox(_T("Please pause the emulator before changing mode."));
}
}
}
-
-void CCodeWindow::OnJITOff(wxCommandEvent& event) {DoJITOff(event, jitoff,
- Core::g_CoreStartupParameter.bJITOff);}
-void CCodeWindow::OnJITLSOff(wxCommandEvent& event) {DoJITOff(event, jitlsoff,
- Core::g_CoreStartupParameter.bJITLoadStoreOff);}
-void CCodeWindow::OnJITLSFOff(wxCommandEvent& event) {DoJITOff(event, jitlsoff,
- Core::g_CoreStartupParameter.bJITLoadStoreFloatingOff);}
-void CCodeWindow::OnJITLSPOff(wxCommandEvent& event) {DoJITOff(event, jitlsoff,
- Core::g_CoreStartupParameter.bJITLoadStorePairedOff);}
-void CCodeWindow::OnJITFPOff(wxCommandEvent& event) {DoJITOff(event, jitfpoff,
- Core::g_CoreStartupParameter.bJITFloatingPointOff);}
-void CCodeWindow::OnJITIOff(wxCommandEvent& event) {DoJITOff(event, jitioff,
- Core::g_CoreStartupParameter.bJITIntegerOff);}
-void CCodeWindow::OnJITPOff(wxCommandEvent& event) {DoJITOff(event, jitpoff,
- Core::g_CoreStartupParameter.bJITPairedOff);}
-void CCodeWindow::OnJITSROff(wxCommandEvent& event) {DoJITOff(event, jitsroff,
- Core::g_CoreStartupParameter.bJITSystemRegistersOff);}
// ==============
@@ -970,7 +979,7 @@ void CCodeWindow::OnToggleVideoWindow(wxCommandEvent& event) {
bool show = GetMenuBar()->IsChecked(event.GetId());
//GetMenuBar()->Check(event.GetId(), false); // Turn off
-
+
IniFile ini;
ini.Load(DEBUGGER_CONFIG_FILE);
ini.Set("ShowOnStart", "VideoWindow", show);
diff --git a/Source/Core/DebuggerWX/Src/CodeWindow.h b/Source/Core/DebuggerWX/Src/CodeWindow.h index 138ffef4c7..9fba9144a8 100644 --- a/Source/Core/DebuggerWX/Src/CodeWindow.h +++ b/Source/Core/DebuggerWX/Src/CodeWindow.h @@ -79,14 +79,15 @@ class CCodeWindow IDM_CALLSLIST,
IDM_SYMBOLLIST,
IDM_INTERPRETER,
- IDM_JITOFF, // jit
- IDM_JITLSOFF,
- IDM_JITLSPOFF,
- IDM_JITLSFOFF,
+
+ IDM_JITUNLIMITED, IDM_JITOFF, // jit
+ IDM_JITLSOFF, IDM_JITLSLXZOFF, IDM_JITLSLWZOFF, IDM_JITLSLBZXOFF,
+ IDM_JITLSPOFF, IDM_JITLSFOFF,
IDM_JITIOFF,
IDM_JITFPOFF,
IDM_JITPOFF,
IDM_JITSROFF,
+
IDM_DUALCORE,
IDM_LOGWINDOW,
IDM_REGISTERWINDOW,
@@ -129,8 +130,8 @@ class CCodeWindow CMemoryWindow* m_MemoryWindow;
CJitWindow* m_JitWindow;
- wxMenuItem* jitoff;
- wxMenuItem* jitlsoff;
+ wxMenuItem* jitunlimited, *jitoff;
+ wxMenuItem* jitlsoff, *jitlslxzoff, *jitlslwzoff, *jitlslbzxoff;
wxMenuItem* jitlspoff;
wxMenuItem* jitlsfoff;
wxMenuItem* jitfpoff;
@@ -175,15 +176,7 @@ class CCodeWindow void OnProfilerMenu(wxCommandEvent& event);
void OnInterpreter(wxCommandEvent& event); // cpu mode menu
- void OnJITOff(wxCommandEvent& event);
- void OnJITLSOff(wxCommandEvent& event);
- void OnJITLSPOff(wxCommandEvent& event);
- void OnJITLSFOff(wxCommandEvent& event);
- void OnJITFPOff(wxCommandEvent& event);
- void OnJITIOff(wxCommandEvent& event);
- void OnJITPOff(wxCommandEvent& event);
- void OnJITSROff(wxCommandEvent& event);
- void DoJITOff(wxCommandEvent& event, wxMenuItem* a, bool& b);
+ void OnJITOff(wxCommandEvent& event);
void CreateMenu(const SCoreStartupParameter& _LocalCoreStartupParameter);
diff --git a/Source/Core/DolphinWX/Src/Frame.cpp b/Source/Core/DolphinWX/Src/Frame.cpp index 678f94d0e2..f36064d5b7 100644 --- a/Source/Core/DolphinWX/Src/Frame.cpp +++ b/Source/Core/DolphinWX/Src/Frame.cpp @@ -613,12 +613,19 @@ void CFrame::OnToggleStatusbar(wxCommandEvent& event) void CFrame::OnKeyDown(wxKeyEvent& event)
{
+ // Toggle fullscreen from Alt + Enter or Esc
if (((event.GetKeyCode() == WXK_RETURN) && (event.GetModifiers() == wxMOD_ALT)) ||
(event.GetKeyCode() == WXK_ESCAPE))
{
ShowFullScreen(!IsFullScreen());
UpdateGUI();
}
+#ifdef _WIN32
+ else if(event.GetKeyCode() == 'E') // Send this to the video plugin WndProc
+ {
+ PostMessage((HWND)Core::GetWindowHandle(), WM_KEYDOWN, event.GetKeyCode(), 0);
+ }
+#endif
else
{
event.Skip();
diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp index 4158c4093e..b57e989c9d 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp @@ -50,6 +50,24 @@ CConfigDlg::OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BO m_comboSampleRate.AddString("48000");
m_comboSampleRate.SetCurSel(g_Config.m_SampleRate == 44100 ? 0 : 1);
+ // Add tooltips
+ CToolTipCtrl ToolTips;
+ ToolTips.Create(m_hWnd);
+ ToolTips.Activate(true);
+ ToolTips.SetMaxTipWidth(200); // limit the width
+ ToolTips.SetDelayTime(TTDT_AUTOPOP, 20 * 1000); // give us time to read it
+ CToolInfo tiHLE(TTF_SUBCLASS, m_buttonEnableHLEAudio, 0, NULL,
+ "This is the most common sound type");
+ CToolInfo tiDTK(TTF_SUBCLASS, m_buttonEnableDTKMusic, 0, NULL,
+ "This is sometimes used to play music tracks from the disc");
+ CToolInfo tiOther(TTF_SUBCLASS, m_buttonEnableThrottle, 0, NULL,
+ "This is sometimes used together with pre-rendered movies. Disabling this"
+ " also disables the speed throttle that is causes. Meaning that"
+ " there will be no upper limit on your FPS.");
+ ToolTips.AddTool(tiHLE);
+ ToolTips.AddTool(tiDTK);
+ ToolTips.AddTool(tiOther);
+
return(TRUE);
}
diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp b/Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp index d91d74b1ba..4f15257ab0 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp +++ b/Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp @@ -109,7 +109,6 @@ void Mixer_PushSamples(short *buffer, int num_stereo_samples, int sample_rate) { Sleep(0);
}
} else {
- wprintf("Tab");
return;
}
#else
diff --git a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h index 7c85c50a6d..385bd7f762 100644 --- a/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h +++ b/Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h @@ -111,7 +111,7 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, ratioFactor = 32000.0f / 44100.0f;
#endif
- if(!Wii) DoVoiceHacks(pb);
+ DoVoiceHacks(pb, Wii);
// =============
if (pb.running)
@@ -148,7 +148,7 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, //if (pb.src_type == 2 && (pb.src.ratio_hi == 0 && pb.src.ratio_lo == 0))
if (pb.running && (pb.src.ratio_hi == 0 && pb.src.ratio_lo == 0))
{
- pb.src.ratio_hi = 1;
+ //pb.src.ratio_hi = 1;
}
// =============
@@ -299,7 +299,7 @@ inline void MixAddVoice(ParamBlockType &pb, int *templbuffer, int *temprbuffer, // Voice hacks
// --------------
template<class ParamBlockType>
-inline void DoVoiceHacks(ParamBlockType &pb)
+inline void DoVoiceHacks(ParamBlockType &pb, bool Wii)
{
// get necessary values
const u32 sampleEnd = (pb.audio_addr.end_addr_hi << 16) | pb.audio_addr.end_addr_lo;
@@ -317,6 +317,7 @@ inline void DoVoiceHacks(ParamBlockType &pb) if (
(sampleEnd > (0x017fffff * 2) || loopPos > (0x017fffff * 2)) // ARAM bounds in nibbles
&& gSSBMremedy1
+ && !Wii
)
{
pb.running = 0;
@@ -356,6 +357,7 @@ inline void DoVoiceHacks(ParamBlockType &pb) && pb.mixer_control == 0 // only use this in SSBM
&& gSSBMremedy2 // let us turn this fix on and off
+ && !Wii
)
{
// reset the detection values
diff --git a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp index 00fe94042c..28901395f5 100644 --- a/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp @@ -1,332 +1,332 @@ -// Copyright (C) 2003-2008 Dolphin Project. - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, version 2.0. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License 2.0 for more details. - -// A copy of the GPL 2.0 should have been included with the program. -// If not, see http://www.gnu.org/licenses/ - -// Official SVN repository and contact information can be found at -// http://code.google.com/p/dolphin-emu/ - - -#include "ConfigDlg.h" -#include "../PadSimple.h" - -#ifdef _WIN32 -#include "XInput.h" -#include "../DirectInputBase.h" - -DInput m_dinput; -#endif - -BEGIN_EVENT_TABLE(ConfigDialog,wxDialog) - EVT_CLOSE(ConfigDialog::OnClose) - EVT_BUTTON(ID_CLOSE,ConfigDialog::OnCloseClick) - EVT_BUTTON(ID_PAD_ABOUT,ConfigDialog::DllAbout) - EVT_CHECKBOX(ID_ATTACHED,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_X360PAD,ConfigDialog::ControllerSettingsChanged) - EVT_CHOICE(ID_X360PAD_CHOICE,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_RUMBLE,ConfigDialog::ControllerSettingsChanged) - EVT_CHECKBOX(ID_DISABLE,ConfigDialog::ControllerSettingsChanged) - EVT_BUTTON(CTL_A,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_B,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_X,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_Y,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_Z,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_START,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_L,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_R,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_MAINRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_SUBRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADUP,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADDOWN,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADLEFT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_DPADRIGHT,ConfigDialog::OnButtonClick) - EVT_BUTTON(CTL_HALFPRESS,ConfigDialog::OnButtonClick) -END_EVENT_TABLE() - -ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style) -: wxDialog(parent, id, title, position, size, style) -{ -#ifdef _WIN32 - m_dinput.Init((HWND)parent); -#endif - clickedButton = NULL; - CreateGUIControls(); - Fit(); -} - -ConfigDialog::~ConfigDialog() -{ -} - -inline void AddControl(wxPanel *pan, wxButton **button, wxStaticBoxSizer *sizer, - const char *name, int ctl, int controller) -{ - wxBoxSizer *hButton = new wxBoxSizer(wxHORIZONTAL); - char keyStr[10] = {0}; - - hButton->Add(new wxStaticText(pan, 0, wxString::FromAscii(name), - wxDefaultPosition, wxDefaultSize), 0, - wxALIGN_CENTER_VERTICAL|wxALL); -#ifdef _WIN32 - DInput::DIKToString(pad[controller].keyForControl[ctl], keyStr); -#else - XKeyToString(pad[controller].keyForControl[ctl], keyStr); -#endif - - *button = new wxButton(pan, ctl, wxString::FromAscii(keyStr), - wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS); - - hButton->Add(*button, 0, wxALIGN_RIGHT|wxALL); - - sizer->Add(hButton, 0, wxALIGN_RIGHT|wxALL); -} - -void ConfigDialog::CreateGUIControls() -{ - // Notebook - m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize); - - // Controller pages - m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[0], wxT("Controller 1")); - m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[1], wxT("Controller 2")); - m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[2], wxT("Controller 3")); - m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize); - m_Notebook->AddPage(m_Controller[3], wxT("Controller 4")); - - // Standard buttons - m_Close = new wxButton(this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_About = new wxButton(this, ID_PAD_ABOUT, wxT("About"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - - // Put notebook and standard buttons in sizers - wxBoxSizer* sSButtons; - sSButtons = new wxBoxSizer(wxHORIZONTAL); - sSButtons->Add(m_About,0,wxALL, 5); - sSButtons->Add(0, 0, 1, wxEXPAND, 5); - sSButtons->Add(m_Close, 0, wxALL, 5); - - wxBoxSizer* sMain; - sMain = new wxBoxSizer(wxVERTICAL); - sMain->Add(m_Notebook, 1, wxEXPAND|wxALL, 5); - sMain->Add(sSButtons, 0, wxEXPAND, 5); - - this->SetSizer(sMain); - this->Layout(); - -#ifdef _WIN32 - // Add connected XPads - for (int x = 0; x < 4; x++) - { - XINPUT_STATE xstate; - DWORD xresult = XInputGetState(x, &xstate); - - if (xresult == ERROR_SUCCESS) - { - arrayStringFor_X360Pad.Add(wxString::Format("%i", x+1)); - } - } -#endif - - for(int i = 0; i < 4; i++) - { - sbDevice[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Controller Settings")); - sDevice[i] = new wxBoxSizer(wxHORIZONTAL); - m_Attached[i] = new wxCheckBox(m_Controller[i], ID_ATTACHED, wxT("Controller attached"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); -#ifdef _WIN32 - m_X360Pad[i] = new wxCheckBox(m_Controller[i], ID_X360PAD, wxT("Enable X360Pad"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_X360PadC[i] = new wxChoice(m_Controller[i], ID_X360PAD_CHOICE, wxDefaultPosition, wxDefaultSize, arrayStringFor_X360Pad, 0, wxDefaultValidator); - m_Rumble[i] = new wxCheckBox(m_Controller[i], ID_RUMBLE, wxT("Enable rumble"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); -#endif - m_Disable[i] = new wxCheckBox(m_Controller[i], ID_DISABLE, wxT("Disable when Dolphin is not in focus"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator); - m_Attached[i]->SetValue(pad[i].bAttached); -#ifdef _WIN32 - if (arrayStringFor_X360Pad.IsEmpty()) - { - m_X360Pad[i]->SetLabel(wxT("Enable X360Pad - No pad connected")); - m_X360Pad[i]->SetValue(false); - m_X360Pad[i]->Enable(false); - pad[i].bEnableXPad = false; - m_X360PadC[i]->Hide(); - m_Rumble[i]->Hide(); - } - else - { - m_X360Pad[i]->SetValue(pad[i].bEnableXPad); - m_X360PadC[i]->SetSelection(pad[i].XPadPlayer); - m_X360PadC[i]->Enable(m_X360Pad[i]->IsChecked()); - m_Rumble[i]->SetValue(pad[i].bRumble); - m_Rumble[i]->Enable(m_X360Pad[i]->IsChecked()); - } -#endif - m_Disable[i]->SetValue(pad[i].bDisable); - - sDevice[i]->Add(m_Attached[i], 0, wxEXPAND|wxALL, 1); - sDevice[i]->AddStretchSpacer(); -#ifdef _WIN32 - sDevice[i]->Add(m_X360Pad[i], 0, wxEXPAND|wxALL, 1); - sDevice[i]->Add(m_X360PadC[i], 0, wxEXPAND|wxALL, 1); - sDevice[i]->Add(m_Rumble[i], 0, wxEXPAND|wxALL, 1); - sDevice[i]->AddStretchSpacer(); -#endif - sDevice[i]->Add(m_Disable[i], 0, wxEXPAND|wxALL, 1); - sbDevice[i]->Add(sDevice[i], 0, wxEXPAND|wxALL, 1); - - sButtons[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Buttons")); - - AddControl(m_Controller[i], &(m_ButtonA[i]), sButtons[i], "A: ", CTL_A, i); - AddControl(m_Controller[i], &(m_ButtonB[i]), sButtons[i], "B: ", CTL_B, i); - AddControl(m_Controller[i], &(m_ButtonX[i]), sButtons[i], "X: ", CTL_X, i); - AddControl(m_Controller[i], &(m_ButtonY[i]), sButtons[i], "Y: ", CTL_Y, i); - AddControl(m_Controller[i], &(m_ButtonZ[i]), sButtons[i], "Z: ", CTL_Z, i); - AddControl(m_Controller[i], &(m_ButtonStart[i]), sButtons[i], "Start: ", CTL_START, i); - - sTriggers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Triggers")); - - AddControl(m_Controller[i], &(m_ButtonL[i]), sTriggers[i], " L: ", CTL_L, i); - AddControl(m_Controller[i], &(m_ButtonR[i]), sTriggers[i], " R: ", CTL_R, i); - - sModifiers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Modifiers")); - - AddControl(m_Controller[i], &(m_HalfPress[i]), sModifiers[i], "1/2 Press: ", CTL_HALFPRESS, i); - - sStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Main Stick")); - - AddControl(m_Controller[i], &(m_StickUp[i]), sStick[i], "Up: ", CTL_MAINUP, i); - AddControl(m_Controller[i], &(m_StickDown[i]), sStick[i], "Down: ", CTL_MAINDOWN, i); - AddControl(m_Controller[i], &(m_StickLeft[i]), sStick[i], "Left: ", CTL_MAINLEFT, i); - AddControl(m_Controller[i], &(m_StickRight[i]), sStick[i], "Right: ", CTL_MAINRIGHT, i); - - sDPad[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("D-Pad")); - - AddControl(m_Controller[i], &(m_DPadUp[i]), sDPad[i], "Up: ", CTL_DPADUP, i); - AddControl(m_Controller[i], &(m_DPadDown[i]), sDPad[i], "Down: ", CTL_DPADDOWN, i); - AddControl(m_Controller[i], &(m_DPadLeft[i]), sDPad[i], "Left: ", CTL_DPADLEFT, i); - AddControl(m_Controller[i], &(m_DPadRight[i]), sDPad[i], "Right: ", CTL_DPADRIGHT, i); - - sCStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("C-Stick")); - - AddControl(m_Controller[i], &(m_CStickUp[i]), sCStick[i], "Up: ", CTL_SUBUP, i); - AddControl(m_Controller[i], &(m_CStickDown[i]), sCStick[i], "Down: ", CTL_SUBDOWN, i); - AddControl(m_Controller[i], &(m_CStickLeft[i]), sCStick[i], "Left: ", CTL_SUBLEFT, i); - AddControl(m_Controller[i], &(m_CStickRight[i]), sCStick[i], "Right: ", CTL_SUBRIGHT, i); - - sPage[i] = new wxGridBagSizer(0, 0); - sPage[i]->SetFlexibleDirection(wxBOTH); - sPage[i]->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED); - sPage[i]->Add(sbDevice[i], wxGBPosition(0, 0), wxGBSpan(1, 5), wxEXPAND|wxALL, 1); - sPage[i]->Add(sButtons[i], wxGBPosition(1, 0), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sTriggers[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 1); - sPage[i]->Add(sModifiers[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL, 1); - sPage[i]->Add(sStick[i], wxGBPosition(1, 2), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sDPad[i], wxGBPosition(1, 3), wxGBSpan(2, 1), wxALL, 1); - sPage[i]->Add(sCStick[i], wxGBPosition(1, 4), wxGBSpan(2, 1), wxALL, 1); - m_Controller[i]->SetSizer(sPage[i]); - sPage[i]->Layout(); - } -} - -void ConfigDialog::OnClose(wxCloseEvent& event) -{ -#ifdef _WIN32 - m_dinput.Free(); -#endif - EndModal(0); -} - -void ConfigDialog::OnKeyDown(wxKeyEvent& event) -{ - if(clickedButton != NULL) - { - int page = m_Notebook->GetSelection(); - -#ifdef _WIN32 - m_dinput.Read(); - for(int i = 0; i < 255; i++) - { - if(m_dinput.diks[i]) - { - char keyStr[10] = {0}; - pad[page].keyForControl[clickedButton->GetId()] = i; - DInput::DIKToString(i, keyStr); - clickedButton->SetLabel(wxString::FromAscii(keyStr)); - break; - } - } -#else - pad[page].keyForControl[clickedButton->GetId()] = wxCharCodeWXToX(event.GetKeyCode()); - clickedButton->SetLabel(wxString::Format(_T("%c"), event.GetKeyCode())); -#endif - clickedButton->Disconnect(); - } - - clickedButton = NULL; - event.Skip(); -} - -void ConfigDialog::OnCloseClick(wxCommandEvent& event) -{ - Close(); -} - -void ConfigDialog::ControllerSettingsChanged(wxCommandEvent& event) -{ - int page = m_Notebook->GetSelection(); - - switch (event.GetId()) - { - case ID_ATTACHED: - pad[page].bAttached = m_Attached[page]->GetValue(); - break; - case ID_X360PAD: - pad[page].bEnableXPad = event.IsChecked(); - m_Rumble[page]->Enable(event.IsChecked()); - m_X360PadC[page]->Enable(event.IsChecked()); - break; - case ID_X360PAD_CHOICE: - pad[page].XPadPlayer = event.GetSelection(); - break; - case ID_RUMBLE: - pad[page].bRumble = m_Rumble[page]->GetValue(); - break; - case ID_DISABLE: - pad[page].bDisable = m_Disable[page]->GetValue(); - break; - } -} - -void ConfigDialog::OnButtonClick(wxCommandEvent& event) -{ - if(clickedButton) - { - clickedButton->SetLabel(oldLabel); - } - clickedButton = (wxButton *)event.GetEventObject(); - oldLabel = clickedButton->GetLabel(); - clickedButton->SetLabel(_("Press Key")); - - clickedButton->Connect(wxID_ANY, wxEVT_KEY_DOWN, - wxKeyEventHandler(ConfigDialog::OnKeyDown), - (wxObject*)NULL, this); -} -void ConfigDialog::DllAbout(wxCommandEvent& event) -{ +// Copyright (C) 2003-2008 Dolphin Project.
+
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, version 2.0.
+
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License 2.0 for more details.
+
+// A copy of the GPL 2.0 should have been included with the program.
+// If not, see http://www.gnu.org/licenses/
+
+// Official SVN repository and contact information can be found at
+// http://code.google.com/p/dolphin-emu/
+
+
+#include "ConfigDlg.h"
+#include "../PadSimple.h"
+
+#ifdef _WIN32
+#include "XInput.h"
+#include "../DirectInputBase.h"
+
+DInput m_dinput;
+#endif
+
+BEGIN_EVENT_TABLE(ConfigDialog,wxDialog)
+ EVT_CLOSE(ConfigDialog::OnClose)
+ EVT_BUTTON(ID_CLOSE,ConfigDialog::OnCloseClick)
+ EVT_BUTTON(ID_PAD_ABOUT,ConfigDialog::DllAbout)
+ EVT_CHECKBOX(ID_ATTACHED,ConfigDialog::ControllerSettingsChanged)
+ EVT_CHECKBOX(ID_X360PAD,ConfigDialog::ControllerSettingsChanged)
+ EVT_CHOICE(ID_X360PAD_CHOICE,ConfigDialog::ControllerSettingsChanged)
+ EVT_CHECKBOX(ID_RUMBLE,ConfigDialog::ControllerSettingsChanged)
+ EVT_CHECKBOX(ID_DISABLE,ConfigDialog::ControllerSettingsChanged)
+ EVT_BUTTON(CTL_A,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_B,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_X,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_Y,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_Z,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_START,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_L,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_R,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_MAINUP,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_MAINDOWN,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_MAINLEFT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_MAINRIGHT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_SUBUP,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_SUBDOWN,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_SUBLEFT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_SUBRIGHT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_DPADUP,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_DPADDOWN,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_DPADLEFT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_DPADRIGHT,ConfigDialog::OnButtonClick)
+ EVT_BUTTON(CTL_HALFPRESS,ConfigDialog::OnButtonClick)
+END_EVENT_TABLE()
+
+ConfigDialog::ConfigDialog(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
+: wxDialog(parent, id, title, position, size, style)
+{
+#ifdef _WIN32
+ m_dinput.Init((HWND)parent);
+#endif
+ clickedButton = NULL;
+ CreateGUIControls();
+ Fit();
+}
+
+ConfigDialog::~ConfigDialog()
+{
+}
+
+inline void AddControl(wxPanel *pan, wxButton **button, wxStaticBoxSizer *sizer,
+ const char *name, int ctl, int controller)
+{
+ wxBoxSizer *hButton = new wxBoxSizer(wxHORIZONTAL);
+ char keyStr[10] = {0};
+
+ hButton->Add(new wxStaticText(pan, 0, wxString::FromAscii(name),
+ wxDefaultPosition, wxDefaultSize), 0,
+ wxALIGN_CENTER_VERTICAL|wxALL);
+#ifdef _WIN32
+ DInput::DIKToString(pad[controller].keyForControl[ctl], keyStr);
+#else
+ XKeyToString(pad[controller].keyForControl[ctl], keyStr);
+#endif
+
+ *button = new wxButton(pan, ctl, wxString::FromAscii(keyStr),
+ wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS);
+
+ hButton->Add(*button, 0, wxALIGN_RIGHT|wxALL);
+
+ sizer->Add(hButton, 0, wxALIGN_RIGHT|wxALL);
+}
+
+void ConfigDialog::CreateGUIControls()
+{
+ // Notebook
+ m_Notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize);
+
+ // Controller pages
+ m_Controller[0] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE1, wxDefaultPosition, wxDefaultSize);
+ m_Notebook->AddPage(m_Controller[0], wxT("Controller 1"));
+ m_Controller[1] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE2, wxDefaultPosition, wxDefaultSize);
+ m_Notebook->AddPage(m_Controller[1], wxT("Controller 2"));
+ m_Controller[2] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE3, wxDefaultPosition, wxDefaultSize);
+ m_Notebook->AddPage(m_Controller[2], wxT("Controller 3"));
+ m_Controller[3] = new wxPanel(m_Notebook, ID_CONTROLLERPAGE4, wxDefaultPosition, wxDefaultSize);
+ m_Notebook->AddPage(m_Controller[3], wxT("Controller 4"));
+
+ // Standard buttons
+ m_Close = new wxButton(this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_About = new wxButton(this, ID_PAD_ABOUT, wxT("About"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+
+ // Put notebook and standard buttons in sizers
+ wxBoxSizer* sSButtons;
+ sSButtons = new wxBoxSizer(wxHORIZONTAL);
+ sSButtons->Add(m_About,0,wxALL, 5);
+ sSButtons->Add(0, 0, 1, wxEXPAND, 5);
+ sSButtons->Add(m_Close, 0, wxALL, 5);
+
+ wxBoxSizer* sMain;
+ sMain = new wxBoxSizer(wxVERTICAL);
+ sMain->Add(m_Notebook, 1, wxEXPAND|wxALL, 5);
+ sMain->Add(sSButtons, 0, wxEXPAND, 5);
+
+ this->SetSizer(sMain);
+ this->Layout();
+
+#ifdef _WIN32
+ // Add connected XPads
+ for (int x = 0; x < 4; x++)
+ {
+ XINPUT_STATE xstate;
+ DWORD xresult = XInputGetState(x, &xstate);
+
+ if (xresult == ERROR_SUCCESS)
+ {
+ arrayStringFor_X360Pad.Add(wxString::Format("%i", x+1));
+ }
+ }
+#endif
+
+ for(int i = 0; i < 4; i++)
+ {
+ sbDevice[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Controller Settings"));
+ sDevice[i] = new wxBoxSizer(wxHORIZONTAL);
+ m_Attached[i] = new wxCheckBox(m_Controller[i], ID_ATTACHED, wxT("Controller attached"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+#ifdef _WIN32
+ m_X360Pad[i] = new wxCheckBox(m_Controller[i], ID_X360PAD, wxT("Enable X360Pad"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_X360PadC[i] = new wxChoice(m_Controller[i], ID_X360PAD_CHOICE, wxDefaultPosition, wxDefaultSize, arrayStringFor_X360Pad, 0, wxDefaultValidator);
+ m_Rumble[i] = new wxCheckBox(m_Controller[i], ID_RUMBLE, wxT("Enable rumble"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+#endif
+ m_Disable[i] = new wxCheckBox(m_Controller[i], ID_DISABLE, wxT("Disable when Dolphin is not in focus"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_Attached[i]->SetValue(pad[i].bAttached);
+#ifdef _WIN32
+ if (arrayStringFor_X360Pad.IsEmpty())
+ {
+ m_X360Pad[i]->SetLabel(wxT("Enable X360Pad - No pad connected"));
+ m_X360Pad[i]->SetValue(false);
+ m_X360Pad[i]->Enable(false);
+ pad[i].bEnableXPad = false;
+ m_X360PadC[i]->Hide();
+ m_Rumble[i]->Hide();
+ }
+ else
+ {
+ m_X360Pad[i]->SetValue(pad[i].bEnableXPad);
+ m_X360PadC[i]->SetSelection(pad[i].XPadPlayer);
+ m_X360PadC[i]->Enable(m_X360Pad[i]->IsChecked());
+ m_Rumble[i]->SetValue(pad[i].bRumble);
+ m_Rumble[i]->Enable(m_X360Pad[i]->IsChecked());
+ }
+#endif
+ m_Disable[i]->SetValue(pad[i].bDisable);
+
+ sDevice[i]->Add(m_Attached[i], 0, wxEXPAND|wxALL, 1);
+ sDevice[i]->AddStretchSpacer();
+#ifdef _WIN32
+ sDevice[i]->Add(m_X360Pad[i], 0, wxEXPAND|wxALL, 1);
+ sDevice[i]->Add(m_X360PadC[i], 0, wxEXPAND|wxALL, 1);
+ sDevice[i]->Add(m_Rumble[i], 0, wxEXPAND|wxALL, 1);
+ sDevice[i]->AddStretchSpacer();
+#endif
+ sDevice[i]->Add(m_Disable[i], 0, wxEXPAND|wxALL, 1);
+ sbDevice[i]->Add(sDevice[i], 0, wxEXPAND|wxALL, 1);
+
+ sButtons[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Buttons"));
+
+ AddControl(m_Controller[i], &(m_ButtonA[i]), sButtons[i], "A: ", CTL_A, i);
+ AddControl(m_Controller[i], &(m_ButtonB[i]), sButtons[i], "B: ", CTL_B, i);
+ AddControl(m_Controller[i], &(m_ButtonX[i]), sButtons[i], "X: ", CTL_X, i);
+ AddControl(m_Controller[i], &(m_ButtonY[i]), sButtons[i], "Y: ", CTL_Y, i);
+ AddControl(m_Controller[i], &(m_ButtonZ[i]), sButtons[i], "Z: ", CTL_Z, i);
+ AddControl(m_Controller[i], &(m_ButtonStart[i]), sButtons[i], "Start: ", CTL_START, i);
+
+ sTriggers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Triggers"));
+
+ AddControl(m_Controller[i], &(m_ButtonL[i]), sTriggers[i], " L: ", CTL_L, i);
+ AddControl(m_Controller[i], &(m_ButtonR[i]), sTriggers[i], " R: ", CTL_R, i);
+
+ sModifiers[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Modifiers"));
+
+ AddControl(m_Controller[i], &(m_HalfPress[i]), sModifiers[i], "1/2 Press: ", CTL_HALFPRESS, i);
+
+ sStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("Main Stick"));
+
+ AddControl(m_Controller[i], &(m_StickUp[i]), sStick[i], "Up: ", CTL_MAINUP, i);
+ AddControl(m_Controller[i], &(m_StickDown[i]), sStick[i], "Down: ", CTL_MAINDOWN, i);
+ AddControl(m_Controller[i], &(m_StickLeft[i]), sStick[i], "Left: ", CTL_MAINLEFT, i);
+ AddControl(m_Controller[i], &(m_StickRight[i]), sStick[i], "Right: ", CTL_MAINRIGHT, i);
+
+ sDPad[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("D-Pad"));
+
+ AddControl(m_Controller[i], &(m_DPadUp[i]), sDPad[i], "Up: ", CTL_DPADUP, i);
+ AddControl(m_Controller[i], &(m_DPadDown[i]), sDPad[i], "Down: ", CTL_DPADDOWN, i);
+ AddControl(m_Controller[i], &(m_DPadLeft[i]), sDPad[i], "Left: ", CTL_DPADLEFT, i);
+ AddControl(m_Controller[i], &(m_DPadRight[i]), sDPad[i], "Right: ", CTL_DPADRIGHT, i);
+
+ sCStick[i] = new wxStaticBoxSizer(wxVERTICAL, m_Controller[i], wxT("C-Stick"));
+
+ AddControl(m_Controller[i], &(m_CStickUp[i]), sCStick[i], "Up: ", CTL_SUBUP, i);
+ AddControl(m_Controller[i], &(m_CStickDown[i]), sCStick[i], "Down: ", CTL_SUBDOWN, i);
+ AddControl(m_Controller[i], &(m_CStickLeft[i]), sCStick[i], "Left: ", CTL_SUBLEFT, i);
+ AddControl(m_Controller[i], &(m_CStickRight[i]), sCStick[i], "Right: ", CTL_SUBRIGHT, i);
+
+ sPage[i] = new wxGridBagSizer(0, 0);
+ sPage[i]->SetFlexibleDirection(wxBOTH);
+ sPage[i]->SetNonFlexibleGrowMode(wxFLEX_GROWMODE_SPECIFIED);
+ sPage[i]->Add(sbDevice[i], wxGBPosition(0, 0), wxGBSpan(1, 5), wxEXPAND|wxALL, 1);
+ sPage[i]->Add(sButtons[i], wxGBPosition(1, 0), wxGBSpan(2, 1), wxALL, 1);
+ sPage[i]->Add(sTriggers[i], wxGBPosition(1, 1), wxGBSpan(1, 1), wxEXPAND|wxALL, 1);
+ sPage[i]->Add(sModifiers[i], wxGBPosition(2, 1), wxGBSpan(1, 1), wxALL, 1);
+ sPage[i]->Add(sStick[i], wxGBPosition(1, 2), wxGBSpan(2, 1), wxALL, 1);
+ sPage[i]->Add(sDPad[i], wxGBPosition(1, 3), wxGBSpan(2, 1), wxALL, 1);
+ sPage[i]->Add(sCStick[i], wxGBPosition(1, 4), wxGBSpan(2, 1), wxALL, 1);
+ m_Controller[i]->SetSizer(sPage[i]);
+ sPage[i]->Layout();
+ }
+}
+
+void ConfigDialog::OnClose(wxCloseEvent& event)
+{
+#ifdef _WIN32
+ m_dinput.Free();
+#endif
+ EndModal(0);
+}
+
+void ConfigDialog::OnKeyDown(wxKeyEvent& event)
+{
+ if(clickedButton != NULL)
+ {
+ int page = m_Notebook->GetSelection();
+
+#ifdef _WIN32
+ m_dinput.Read();
+ for(int i = 0; i < 255; i++)
+ {
+ if(m_dinput.diks[i])
+ {
+ char keyStr[10] = {0};
+ pad[page].keyForControl[clickedButton->GetId()] = i;
+ DInput::DIKToString(i, keyStr);
+ clickedButton->SetLabel(wxString::FromAscii(keyStr));
+ break;
+ }
+ }
+#else
+ pad[page].keyForControl[clickedButton->GetId()] = wxCharCodeWXToX(event.GetKeyCode());
+ clickedButton->SetLabel(wxString::Format(_T("%c"), event.GetKeyCode()));
+#endif
+ clickedButton->Disconnect();
+ }
+
+ clickedButton = NULL;
+ event.Skip();
+}
+
+void ConfigDialog::OnCloseClick(wxCommandEvent& event)
+{
+ Close();
+}
+
+void ConfigDialog::ControllerSettingsChanged(wxCommandEvent& event)
+{
+ int page = m_Notebook->GetSelection();
+
+ switch (event.GetId())
+ {
+ case ID_ATTACHED:
+ pad[page].bAttached = m_Attached[page]->GetValue();
+ break;
+ case ID_X360PAD:
+ pad[page].bEnableXPad = event.IsChecked();
+ m_Rumble[page]->Enable(event.IsChecked());
+ m_X360PadC[page]->Enable(event.IsChecked());
+ break;
+ case ID_X360PAD_CHOICE:
+ pad[page].XPadPlayer = event.GetSelection();
+ break;
+ case ID_RUMBLE:
+ pad[page].bRumble = m_Rumble[page]->GetValue();
+ break;
+ case ID_DISABLE:
+ pad[page].bDisable = m_Disable[page]->GetValue();
+ break;
+ }
+}
+
+void ConfigDialog::OnButtonClick(wxCommandEvent& event)
+{
+ if(clickedButton)
+ {
+ clickedButton->SetLabel(oldLabel);
+ }
+ clickedButton = (wxButton *)event.GetEventObject();
+ oldLabel = clickedButton->GetLabel();
+ clickedButton->SetLabel(_("Press Key"));
+
+ clickedButton->Connect(wxID_ANY, wxEVT_KEY_DOWN,
+ wxKeyEventHandler(ConfigDialog::OnKeyDown),
+ (wxObject*)NULL, this);
+}
+void ConfigDialog::DllAbout(wxCommandEvent& event)
+{
wxString message;
#ifdef _WIN32
message = _("A simple keyboard and XInput plugin for dolphin.");
@@ -335,5 +335,5 @@ void ConfigDialog::DllAbout(wxCommandEvent& event) #endif
wxMessageBox(_T("Dolphin PadSimple Plugin\nBy ector and F|RES\n\n" + message),
- _T("Dolphin PadSimple"), wxOK, this); -} + _T("Dolphin PadSimple"), wxOK, this);
+}
diff --git a/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp b/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp index 49cfc08df1..1a718740b6 100644 --- a/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp +++ b/Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp @@ -170,4 +170,4 @@ namespace EmuWindow rc.bottom = rc.top + h;
::MoveWindow(m_hWnd, rc.left, rc.top, rc.right-rc.left, rc.bottom-rc.top, TRUE);
}
-}
\ No newline at end of file +}
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp b/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp index 251bb6a7ce..6e4ea5c6c7 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/Config.cpp @@ -78,6 +78,7 @@ void Config::Load() iniFile.Get("Hacks", "EFBToTextureDisable", &bEBFToTextureDisable, 0);
+ iniFile.Get("Hacks", "EBFToTextureDisableHotKey", &bEBFToTextureDisableHotKey, 0);
iniFile.Get("Hacks", "ProjectionHax1", &bProjectionHax1, 0);
iniFile.Get("Hacks", "ProjectionHax2", &bProjectionHax2, 0);
}
@@ -112,6 +113,7 @@ void Config::Save() iniFile.Set("Enhancements", "ForceMaxAniso", bForceMaxAniso);
iniFile.Set("Hacks", "EFBToTextureDisable", bEBFToTextureDisable);
+ iniFile.Set("Hacks", "EBFToTextureDisableHotKey", &bEBFToTextureDisableHotKey);
iniFile.Set("Hacks", "ProjectionHax1", bProjectionHax1);
iniFile.Set("Hacks", "ProjectionHax2", bProjectionHax2);
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/Config.h b/Source/Plugins/Plugin_VideoOGL/Src/Config.h index 5642467f7e..4fc640d681 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/Config.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/Config.h @@ -62,7 +62,7 @@ struct Config bool bDumpTextures;
// Hacks
- bool bEBFToTextureDisable;
+ bool bEBFToTextureDisable; bool bEBFToTextureDisableHotKey;
bool bProjectionHax1;
bool bProjectionHax2;
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp index b7fdb2fe9f..d2886fd5cf 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp @@ -97,7 +97,12 @@ void ConfigDialog::CreateGUIControls() m_Fullscreen->SetValue(g_Config.bFullscreen);
m_RenderToMainWindow = new wxCheckBox(m_PageGeneral, ID_RENDERTOMAINWINDOW, wxT("Render to main window"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
m_RenderToMainWindow->SetValue(g_Config.renderToMainframe);
- m_StretchToFit = new wxCheckBox(m_PageGeneral, ID_STRETCHTOFIT, wxT("Stretch to fit (instead of changing res.)"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_StretchToFit = new wxCheckBox(m_PageGeneral, ID_STRETCHTOFIT, wxT("Stretch to fit"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_StretchToFit->SetToolTip
+ ("This will use the game's native resolution and stretch it to fill the"
+ "\nwindow instead of changing the internal display resolution. It"
+ "\nmay result in a slightly blurrier image, but it may also give a higher"
+ "\nFPS if you have a slow graphics card.");
m_StretchToFit->SetValue(g_Config.bStretchToFit);
m_KeepAR = new wxCheckBox(m_PageGeneral, ID_KEEPAR, wxT("Keep 4:3 aspect ratio"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
m_KeepAR->SetValue(g_Config.bKeepAR);
@@ -188,11 +193,20 @@ void ConfigDialog::CreateGUIControls() // Hacks
sbHacks = new wxStaticBoxSizer(wxVERTICAL, m_PageAdvanced, wxT("Hacks"));
- m_EFBToTextureDisable = new wxCheckBox(m_PageAdvanced, ID_EFBTOTEXTUREDISABLE, wxT("Disable copy EFB to texture"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_EFBToTextureDisable = new wxCheckBox(m_PageAdvanced,
+ ID_EFBTOTEXTUREDISABLE, wxT("Disable copy EFB to texture"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_EFBToTextureDisable->SetToolTip("Do not copy the Embedded Framebuffer (EFB)"
+ " to the\nTexture. This may result in a speed increase.");
m_EFBToTextureDisable->Enable(true);
m_EFBToTextureDisable->SetValue(g_Config.bEBFToTextureDisable);
+ m_EFBToTextureDisableHotKey = new wxCheckBox(m_PageAdvanced,
+ ID_EFBTOTEXTUREDISABLEHOTKEY, wxT("with hotkey E"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_EFBToTextureDisableHotKey->SetToolTip("Use the E key to turn this option on and off");
+ m_EFBToTextureDisableHotKey->SetValue(g_Config.bEBFToTextureDisableHotKey);
m_ProjectionHax1 = new wxCheckBox(m_PageAdvanced, ID_PROJECTIONHACK1, wxT("Projection before R945"), wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator);
+ m_ProjectionHax1->SetToolTip("This may reveal otherwise invisible graphics"
+ " in\ngames like Mario Galaxy or Ikaruga.");
m_ProjectionHax1->Enable(true);
m_ProjectionHax1->SetValue(g_Config.bProjectionHax1);
@@ -226,6 +240,7 @@ void ConfigDialog::CreateGUIControls() sHacks = new wxGridBagSizer(0, 0);
sHacks->Add(m_EFBToTextureDisable, wxGBPosition(0, 0), wxGBSpan(1, 1), wxALL, 5);
+ sHacks->Add(m_EFBToTextureDisableHotKey, wxGBPosition(0, 1), wxGBSpan(1, 1), wxALL, 5);
sHacks->Add(m_ProjectionHax1, wxGBPosition(1, 0), wxGBSpan(1, 1), wxALL, 5);
sHacks->Add(m_ProjectionHax2, wxGBPosition(2, 0), wxGBSpan(1, 2), wxALL, 5);
sbHacks->Add(sHacks);
@@ -288,7 +303,7 @@ void ConfigDialog::GeneralSettingsChanged(wxCommandEvent& event) case ID_STRETCHTOFIT:
g_Config.bStretchToFit = m_StretchToFit->IsChecked();
break;
- case ID_KEEPAR:
+ case ID_KEEPAR:
g_Config.bKeepAR = m_KeepAR->IsChecked();
break;
case ID_HIDECURSOR:
@@ -355,6 +370,9 @@ void ConfigDialog::AdvancedSettingsChanged(wxCommandEvent& event) case ID_EFBTOTEXTUREDISABLE:
g_Config.bEBFToTextureDisable = m_EFBToTextureDisable->IsChecked();
break;
+ case ID_EFBTOTEXTUREDISABLEHOTKEY:
+ g_Config.bEBFToTextureDisableHotKey = m_EFBToTextureDisableHotKey->IsChecked();
+ break;
case ID_PROJECTIONHACK1:
g_Config.bProjectionHax1 = m_ProjectionHax1->IsChecked();
break;
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h index 71d7c70a15..ee343e23a6 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h +++ b/Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h @@ -93,7 +93,7 @@ class ConfigDialog : public wxDialog wxCheckBox *m_DisableTexturing;
wxCheckBox *m_DumpTextures;
wxDirPickerCtrl *m_TexturePath;
- wxCheckBox *m_EFBToTextureDisable;
+ wxCheckBox *m_EFBToTextureDisable, *m_EFBToTextureDisableHotKey;
wxCheckBox *m_ProjectionHax1;
wxCheckBox *m_ProjectionHax2;
@@ -135,7 +135,7 @@ class ConfigDialog : public wxDialog ID_DUMPTEXTURES,
ID_TEXTUREPATH,
- ID_EFBTOTEXTUREDISABLE,
+ ID_EFBTOTEXTUREDISABLE, ID_EFBTOTEXTUREDISABLEHOTKEY,
ID_PROJECTIONHACK1,
ID_PROJECTIONHACK2
};
diff --git a/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp b/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp index 62c402f1b3..b656d5a3f4 100644 --- a/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp +++ b/Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp @@ -29,8 +29,9 @@ #include "main.h"
#include "Win32.h"
+#include "Render.h" // for AddMessage
-#include "IniFile.h" // we need this for the debugger to work
+#include "StringUtil.h" // for StringFromFormat
void OpenConsole();
void CloseConsole();
@@ -136,6 +137,14 @@ namespace EmuWindow case MY_KEYS:
hypotheticalScene->sendMessage(KEYDOWN...);
*/
+ case 'E': // EFB hotkey
+ if(g_Config.bEBFToTextureDisableHotKey)
+ {
+ g_Config.bEBFToTextureDisable = !g_Config.bEBFToTextureDisable;
+ Renderer::AddMessage(StringFromFormat("Copy EFB was turned %s",
+ g_Config.bEBFToTextureDisable ? "off" : "on").c_str(), 5000);
+ }
+ break;
}
g_VideoInitialize.pKeyPress(LOWORD(wParam), GetAsyncKeyState(VK_SHIFT) != 0, GetAsyncKeyState(VK_CONTROL) != 0);
break;
|
