summaryrefslogtreecommitdiff
path: root/Source/Plugins
diff options
context:
space:
mode:
authorJohn Peterson <jpeterson57@gmail.com>2008-11-22 16:46:12 +0000
committerJohn Peterson <jpeterson57@gmail.com>2008-11-22 16:46:12 +0000
commitf0596fee55656e45c33eb30d2ffaed65cd413efb (patch)
tree6e5ac34f17f071bb752f1c8854ea00f7b0636b60 /Source/Plugins
parent36bf2fedf696c0795d0731904346b594a906df54 (diff)
Added Copy EFB hotkey to OpenGL plugin (to be able to easily switch back and forth during emulation). Added Unlimited JIT cache option to debugger. It may fix the Zelda TP crashes.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@1243 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins')
-rw-r--r--Source/Plugins/Plugin_DSP_HLE/Src/ConfigDlg.cpp18
-rw-r--r--Source/Plugins/Plugin_DSP_HLE/Src/PCHW/Mixer.cpp1
-rw-r--r--Source/Plugins/Plugin_DSP_HLE/Src/UCodes/UCode_AX_Voice.h8
-rw-r--r--Source/Plugins/Plugin_PadSimple/Src/GUI/ConfigDlg.cpp662
-rw-r--r--Source/Plugins/Plugin_VideoDX9/Src/EmuWindow.cpp2
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/Config.cpp2
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/Config.h2
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.cpp24
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/GUI/ConfigDlg.h4
-rw-r--r--Source/Plugins/Plugin_VideoOGL/Src/OS/Win32.cpp11
10 files changed, 391 insertions, 343 deletions
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;