Spelling fixes, etc
[dolphin.git] / Source / Plugins / Plugin_VideoDX9 / Src / DlgSettings.cpp
blob65d965167b3d2109deb5bd2d3d5040c2aeb417f5
1 // Copyright (C) 2003 Dolphin Project.
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, version 2.0.
7 // This program is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 // GNU General Public License 2.0 for more details.
12 // A copy of the GPL 2.0 should have been included with the program.
13 // If not, see http://www.gnu.org/licenses/
15 // Official SVN repository and contact information can be found at
16 // http://code.google.com/p/dolphin-emu/
18 #include <wx/wx.h>
19 #include <wx/sizer.h>
20 #include <wx/filepicker.h>
21 #include <wx/gbsizer.h>
22 #include <wx/notebook.h>
23 #include <wx/mimetype.h>
25 #include "DlgSettings.h"
26 #include "FileUtil.h"
28 #include "D3DBase.h"
29 #include "D3DUtil.h"
31 #include "VideoConfig.h"
33 #include "TextureCache.h"
35 BEGIN_EVENT_TABLE(GFXConfigDialogDX,wxDialog)
37 EVT_CLOSE(GFXConfigDialogDX::OnClose)
38 EVT_BUTTON(ID_CLOSE, GFXConfigDialogDX::CloseClick)
40 //Direct3D Tab
41 EVT_CHECKBOX(ID_VSYNC, GFXConfigDialogDX::DirectXSettingsChanged)
42 EVT_CHECKBOX(ID_WIDESCREEN_HACK, GFXConfigDialogDX::DirectXSettingsChanged)
43 EVT_CHOICE(ID_ASPECT, GFXConfigDialogDX::DirectXSettingsChanged)
44 EVT_CHOICE(ID_ANTIALIASMODE, GFXConfigDialogDX::DirectXSettingsChanged)
45 EVT_CHOICE(ID_EFBSCALEMODE, GFXConfigDialogDX::DirectXSettingsChanged)
46 EVT_CHECKBOX(ID_EFB_ACCESS_ENABLE, GFXConfigDialogDX::DirectXSettingsChanged)
47 EVT_CHECKBOX(ID_SAFETEXTURECACHE, GFXConfigDialogDX::DirectXSettingsChanged)
48 EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_SAFE, GFXConfigDialogDX::DirectXSettingsChanged)
49 EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_NORMAL, GFXConfigDialogDX::DirectXSettingsChanged)
50 EVT_RADIOBUTTON(ID_RADIO_SAFETEXTURECACHE_FAST, GFXConfigDialogDX::DirectXSettingsChanged)
52 //Enhancements tab
53 EVT_CHECKBOX(ID_FORCEFILTERING, GFXConfigDialogDX::EnhancementsSettingsChanged)
54 EVT_CHECKBOX(ID_FORCEANISOTROPY, GFXConfigDialogDX::EnhancementsSettingsChanged)
55 EVT_CHECKBOX(ID_LOADHIRESTEXTURES, GFXConfigDialogDX::EnhancementsSettingsChanged)
56 EVT_CHECKBOX(ID_EFBSCALEDCOPY, GFXConfigDialogDX::EnhancementsSettingsChanged)
58 //Advanced Tab
59 EVT_CHECKBOX(ID_DISABLEFOG, GFXConfigDialogDX::AdvancedSettingsChanged)
60 EVT_CHECKBOX(ID_OVERLAYFPS, GFXConfigDialogDX::AdvancedSettingsChanged)
61 EVT_CHECKBOX(ID_ENABLEEFBCOPY, GFXConfigDialogDX::AdvancedSettingsChanged)
62 EVT_RADIOBUTTON(ID_EFBTORAM, GFXConfigDialogDX::AdvancedSettingsChanged)
63 EVT_RADIOBUTTON(ID_EFBTOTEX, GFXConfigDialogDX::AdvancedSettingsChanged)
64 EVT_CHECKBOX(ID_ENABLEHOTKEY, GFXConfigDialogDX::AdvancedSettingsChanged)
65 EVT_CHECKBOX(ID_WIREFRAME, GFXConfigDialogDX::AdvancedSettingsChanged)
66 EVT_CHECKBOX(ID_ENABLEXFB, GFXConfigDialogDX::AdvancedSettingsChanged)
67 EVT_CHECKBOX(ID_ENABLEREALXFB, GFXConfigDialogDX::AdvancedSettingsChanged)
68 EVT_CHECKBOX(ID_USENATIVEMIPS, GFXConfigDialogDX::AdvancedSettingsChanged)
69 EVT_CHECKBOX(ID_TEXDUMP, GFXConfigDialogDX::AdvancedSettingsChanged)
70 EVT_CHECKBOX(ID_DUMPFRAMES, GFXConfigDialogDX::AdvancedSettingsChanged)
71 EVT_CHECKBOX(ID_OVERLAYSTATS, GFXConfigDialogDX::AdvancedSettingsChanged)
72 EVT_CHECKBOX(ID_PROJSTATS, GFXConfigDialogDX::AdvancedSettingsChanged)
73 EVT_CHECKBOX(ID_SHADERERRORS, GFXConfigDialogDX::AdvancedSettingsChanged)
74 EVT_CHECKBOX(ID_TEXFMT_OVERLAY, GFXConfigDialogDX::AdvancedSettingsChanged)
75 EVT_CHECKBOX(ID_TEXFMT_CENTER, GFXConfigDialogDX::AdvancedSettingsChanged)
77 END_EVENT_TABLE()
79 GFXConfigDialogDX::GFXConfigDialogDX(wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style)
80 : wxDialog(parent, id, title, position, size, style)
83 // Close and unload the window
84 // ---------------
85 GFXConfigDialogDX::~GFXConfigDialogDX()
87 INFO_LOG(CONSOLE, "GFXConfigDialogDX closed");
90 void GFXConfigDialogDX::OnClose(wxCloseEvent& event)
92 //INFO_LOG(CONSOLE, "OnClose");
93 CloseWindow();
96 void GFXConfigDialogDX::CloseClick(wxCommandEvent& WXUNUSED (event))
98 //INFO_LOG(CONSOLE, "CloseClick");
99 CloseWindow();
102 void GFXConfigDialogDX::InitializeGUIValues()
104 // General Display Settings
105 m_AdapterCB->SetSelection(g_Config.iAdapter);
106 m_VSync->SetValue(g_Config.bVSync);
107 m_WidescreenHack->SetValue(g_Config.bWidescreenHack);
108 m_KeepAR->SetSelection(g_Config.iAspectRatio);
110 m_MSAAModeCB->SetSelection(g_Config.iMultisampleMode);
111 m_EFBScaleMode->SetSelection(g_Config.iEFBScale);
112 m_EnableEFBAccess->SetValue(g_Config.bEFBAccessEnable);
113 m_SafeTextureCache->SetValue(g_Config.bSafeTextureCache);
114 if(g_Config.iSafeTextureCache_ColorSamples == 0)
115 m_Radio_SafeTextureCache_Safe->SetValue(true);
116 else
117 if(g_Config.iSafeTextureCache_ColorSamples > 128)
118 m_Radio_SafeTextureCache_Normal->SetValue(true);
119 else
120 m_Radio_SafeTextureCache_Fast->SetValue(true);
122 // Enhancements
123 if(g_Config.iMaxAnisotropy == 1)
124 m_MaxAnisotropy->SetValue(false);
125 else
127 if(g_Config.iMaxAnisotropy == 8)
128 m_MaxAnisotropy->SetValue(true);
130 m_ForceFiltering->SetValue(g_Config.bForceFiltering);
131 m_HiresTextures->SetValue(g_Config.bHiresTextures);
132 m_MSAAModeCB->SetSelection(g_Config.iMultisampleMode);
133 m_EFBScaledCopy->SetValue(g_Config.bCopyEFBScaled);
135 //Advance
136 m_DisableFog->SetValue(g_Config.bDisableFog);
137 m_OverlayFPS->SetValue(g_Config.bShowFPS);
139 m_CopyEFB->SetValue(!g_Config.bEFBCopyDisable);
140 g_Config.bCopyEFBToTexture ? m_Radio_CopyEFBToGL->SetValue(true) : m_Radio_CopyEFBToRAM->SetValue(true);
141 m_EnableHotkeys->SetValue(g_Config.bOSDHotKey);
142 m_WireFrame->SetValue(g_Config.bWireFrame);
143 m_EnableXFB->SetValue(g_Config.bUseXFB);
144 m_EnableRealXFB->SetValue(g_Config.bUseRealXFB);
145 m_UseNativeMips->SetValue(g_Config.bUseNativeMips);
147 m_DumpTextures->SetValue(g_Config.bDumpTextures);
148 m_DumpFrames->SetValue(g_Config.bDumpFrames);
149 m_OverlayStats->SetValue(g_Config.bOverlayStats);
150 m_ProjStats->SetValue(g_Config.bOverlayProjStats);
151 m_ShaderErrors->SetValue(g_Config.bShowShaderErrors);
152 m_TexfmtOverlay->SetValue(g_Config.bTexFmtOverlayEnable);
153 m_TexfmtCenter->SetValue(g_Config.bTexFmtOverlayCenter);
154 m_TexfmtCenter->Enable(m_TexfmtOverlay->IsChecked());
157 void GFXConfigDialogDX::CreateGUIControls()
159 this->SetSizeHints( wxDefaultSize, wxDefaultSize );
160 this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
162 wxBoxSizer* sMain;
163 sMain = new wxBoxSizer( wxVERTICAL );
165 m_Notebook = new wxNotebook( this, ID_NOTEBOOK, wxDefaultPosition, wxDefaultSize, 0 );
166 m_PageDirect3D = new wxPanel( m_Notebook, ID_DIRERCT3D, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
167 m_PageEnhancements = new wxPanel( m_Notebook, ID_PAGEENHANCEMENTS, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
168 m_PageAdvanced = new wxPanel( m_Notebook, ID_PAGEADVANCED, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
170 //D3D Tab
171 wxStaticBoxSizer* sbBasic;
172 sbBasic = new wxStaticBoxSizer( new wxStaticBox( m_PageDirect3D, wxID_ANY, wxT("Basic") ), wxVERTICAL );
173 m_AdapterText = new wxStaticText( m_PageDirect3D, wxID_ANY, wxT("Adapter:"), wxDefaultPosition, wxDefaultSize, 0 );
174 m_AdapterText->Wrap( -1 );
176 wxArrayString arrayStringFor_AdapterCB;
177 for (int i = 0; i < D3D::GetNumAdapters(); ++i)
179 const D3D::Adapter &adapter = D3D::GetAdapter(i);
180 arrayStringFor_AdapterCB.Add(wxString::FromAscii(adapter.ident.Description));
182 const D3D::Adapter &adapter = D3D::GetAdapter(g_Config.iAdapter);
184 m_AdapterCB = new wxChoice( m_PageDirect3D, ID_ADAPTER, wxDefaultPosition, wxDefaultSize, arrayStringFor_AdapterCB, 0);
185 m_VSync = new wxCheckBox( m_PageDirect3D, ID_VSYNC, wxT("V-sync"), wxPoint( -1,-1 ), wxDefaultSize, 0 );
186 m_WidescreenHack = new wxCheckBox( m_PageDirect3D, ID_WIDESCREEN_HACK, wxT("Widescreen hack"), wxPoint( -1,-1 ), wxDefaultSize, 0 );
188 m_staticARText = new wxStaticText( m_PageDirect3D, wxID_ANY, wxT("Aspect ratio:"), wxPoint( -1,-1 ), wxDefaultSize, 0 );
189 m_staticARText->Wrap( -1 );
190 wxString m_KeepARChoices[] = { wxT("Auto"), wxT("Force 16:9 (widescreen)"), wxT("Force 4:3 (standard)"), wxT("Stretch to window") };
191 int m_KeepARNChoices = sizeof( m_KeepARChoices ) / sizeof( wxString );
192 m_KeepAR = new wxChoice( m_PageDirect3D, ID_ASPECT, wxPoint( -1,-1 ), wxDefaultSize, m_KeepARNChoices, m_KeepARChoices, 0 );
193 m_KeepAR->SetSelection( 0 );
195 m_staticMSAAText = new wxStaticText( m_PageDirect3D, wxID_ANY, wxT("SSAA mode:"), wxPoint( -1,-1 ), wxDefaultSize, 0 );
196 m_staticMSAAText->Wrap( -1 );
197 wxArrayString arrayStringFor_MSAAModeCB;
198 for (int i = 0; i < (int)adapter.aa_levels.size(); i++)
200 arrayStringFor_MSAAModeCB.Add(wxString::FromAscii(adapter.aa_levels[i].name));
202 m_MSAAModeCB = new wxChoice( m_PageDirect3D, ID_ANTIALIASMODE, wxPoint( -1,-1 ), wxDefaultSize, arrayStringFor_MSAAModeCB, 0);
203 m_EFBScaleText = new wxStaticText( m_PageDirect3D, wxID_ANY, wxT("EFB scale:"), wxDefaultPosition, wxDefaultSize, 0 );
204 m_EFBScaleText->Wrap( -1 );
205 wxString m_EFBScaleModeChoices[] = { wxT("Auto (fractional)"), wxT("Auto (integral)"), wxT("1x"), wxT("2x"), wxT("3x") };
206 int m_EFBScaleModeNChoices = sizeof( m_EFBScaleModeChoices ) / sizeof( wxString );
207 m_EFBScaleMode = new wxChoice( m_PageDirect3D, ID_EFBSCALEMODE, wxDefaultPosition, wxDefaultSize, m_EFBScaleModeNChoices, m_EFBScaleModeChoices, 0 );
209 m_EnableEFBAccess = new wxCheckBox( m_PageDirect3D, ID_EFB_ACCESS_ENABLE, wxT("Enable CPU->EFB access"), wxDefaultPosition, wxDefaultSize, 0 );
211 wxStaticBoxSizer* sbSTC;
212 sbSTC = new wxStaticBoxSizer( new wxStaticBox( m_PageDirect3D, wxID_ANY, wxT("Safe texture cache") ), wxVERTICAL );
213 m_SafeTextureCache = new wxCheckBox( m_PageDirect3D, ID_SAFETEXTURECACHE, wxT("Use safe texture cache"), wxDefaultPosition, wxDefaultSize, 0 );
214 m_Radio_SafeTextureCache_Safe = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_SAFE, wxT("safe"), wxDefaultPosition, wxDefaultSize, 0 );
215 m_Radio_SafeTextureCache_Normal = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_NORMAL, wxT("normal"), wxDefaultPosition, wxDefaultSize, 0 );
216 m_Radio_SafeTextureCache_Fast = new wxRadioButton( m_PageDirect3D, ID_RADIO_SAFETEXTURECACHE_FAST, wxT("fast"), wxDefaultPosition, wxDefaultSize, 0 );
218 // Sizers
219 wxGridBagSizer* sBasic;
220 wxBoxSizer* sGeneral;
222 sGeneral = new wxBoxSizer( wxVERTICAL );
223 sBasic = new wxGridBagSizer( 0, 0 );
224 sBasic->SetFlexibleDirection( wxBOTH );
225 sBasic->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
226 sBasic->Add( m_AdapterText, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
227 sBasic->Add( m_AdapterCB, wxGBPosition( 0, 1 ), wxGBSpan( 1, 2 ), wxALL|wxEXPAND, 5 );
228 sBasic->Add( m_VSync, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
229 sBasic->Add( m_WidescreenHack, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALL, 5 );
230 sBasic->Add( m_staticARText, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
231 sBasic->Add( m_KeepAR, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
232 sBasic->Add( m_staticMSAAText, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALL|wxALIGN_CENTER_VERTICAL, 5 );
233 sBasic->Add( m_MSAAModeCB, wxGBPosition( 3, 1 ), wxGBSpan( 1, 2 ), wxALL, 5 );
234 sBasic->Add( m_EFBScaleText, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
235 sBasic->Add( m_EFBScaleMode, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
236 sBasic->Add( m_EnableEFBAccess, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
237 sbBasic->Add( sBasic, 0, 0, 5 );
238 sGeneral->Add( sbBasic, 0, wxEXPAND|wxALL, 5 );
240 wxGridBagSizer* sSTC;
241 sSTC = new wxGridBagSizer( 0, 0 );
242 sSTC->SetFlexibleDirection( wxBOTH );
243 sSTC->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
244 sSTC->Add( m_SafeTextureCache, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
245 sSTC->Add( 0, 0, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND, 5 );
246 sSTC->Add( m_Radio_SafeTextureCache_Safe, wxGBPosition( 0, 2 ), wxGBSpan( 1, 1 ), wxALL, 5 );
247 sSTC->Add( m_Radio_SafeTextureCache_Normal, wxGBPosition( 0, 3 ), wxGBSpan( 1, 1 ), wxALL, 5 );
248 sSTC->Add( m_Radio_SafeTextureCache_Fast, wxGBPosition( 0, 4 ), wxGBSpan( 1, 1 ), wxALL, 5 );
249 sbSTC->Add( sSTC, 0, wxEXPAND, 5 );
250 sGeneral->Add( sbSTC, 0, wxEXPAND|wxALL, 5 );
252 m_PageDirect3D->SetSizer( sGeneral );
253 m_PageDirect3D->Layout();
254 sGeneral->Fit( m_PageDirect3D );
255 m_Notebook->AddPage( m_PageDirect3D, wxT("General"), true );
257 //Enhancements Tab
258 wxStaticBoxSizer* sbTextureFilter;
259 sbTextureFilter = new wxStaticBoxSizer( new wxStaticBox( m_PageEnhancements, wxID_ANY, wxT("Texture filtering") ), wxVERTICAL );
260 m_ForceFiltering = new wxCheckBox( m_PageEnhancements, ID_FORCEFILTERING, wxT("Force bi/trilinear filtering (breaks video in several Wii games)"), wxDefaultPosition, wxDefaultSize, 0 );
261 m_MaxAnisotropy = new wxCheckBox( m_PageEnhancements, ID_FORCEANISOTROPY, wxT("Enable 16x anisotropic filtering"), wxDefaultPosition, wxDefaultSize, 0 );
262 m_HiresTextures = new wxCheckBox( m_PageEnhancements, ID_LOADHIRESTEXTURES, wxT("Enable hires texture loading"), wxDefaultPosition, wxDefaultSize, 0 );
264 wxStaticBoxSizer* sbEFBHacks;
265 sbEFBHacks = new wxStaticBoxSizer( new wxStaticBox( m_PageEnhancements, wxID_ANY, wxT("EFB hacks") ), wxVERTICAL );
266 m_EFBScaledCopy = new wxCheckBox( m_PageEnhancements, ID_EFBSCALEDCOPY, wxT("EFB scaled copy"), wxDefaultPosition, wxDefaultSize, 0 );
268 // Sizers
269 wxBoxSizer* sEnhancements;
270 wxGridBagSizer* sTextureFilter;
271 sEnhancements = new wxBoxSizer( wxVERTICAL );
272 sTextureFilter = new wxGridBagSizer( 0, 0 );
273 sTextureFilter->SetFlexibleDirection( wxBOTH );
274 sTextureFilter->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
275 sTextureFilter->Add( m_ForceFiltering, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
276 sTextureFilter->Add( m_MaxAnisotropy, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
277 sTextureFilter->Add( m_HiresTextures, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
278 sbTextureFilter->Add( sTextureFilter, 0, wxEXPAND, 5 );
279 sEnhancements->Add( sbTextureFilter, 0, wxEXPAND|wxALL, 5 );
281 wxGridBagSizer* sEFBHacks;
282 sEFBHacks = new wxGridBagSizer( 0, 0 );
283 sEFBHacks->SetFlexibleDirection( wxBOTH );
284 sEFBHacks->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
285 sEFBHacks->Add( m_EFBScaledCopy, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
286 sbEFBHacks->Add( sEFBHacks, 1, wxEXPAND, 5 );
287 sEnhancements->Add( sbEFBHacks, 0, wxEXPAND|wxALL, 5 );
289 m_PageEnhancements->SetSizer( sEnhancements );
290 m_PageEnhancements->Layout();
291 sEnhancements->Fit( m_PageEnhancements );
292 m_Notebook->AddPage( m_PageEnhancements, wxT("Enhancements"), false );
294 //Advanced Tab
295 wxStaticBoxSizer* sbSettings;
296 sbSettings = new wxStaticBoxSizer( new wxStaticBox( m_PageAdvanced, wxID_ANY, wxT("Settings") ), wxVERTICAL );
297 m_DisableFog = new wxCheckBox( m_PageAdvanced, ID_DISABLEFOG, wxT("Disable fog"), wxDefaultPosition, wxDefaultSize, 0 );
298 m_OverlayFPS = new wxCheckBox( m_PageAdvanced, ID_OVERLAYFPS, wxT("Overlay FPS counter"), wxDefaultPosition, wxDefaultSize, 0 );
299 m_CopyEFB = new wxCheckBox( m_PageAdvanced, ID_ENABLEEFBCOPY, wxT("Enable EFB copy"), wxDefaultPosition, wxDefaultSize, 0 );
300 m_EnableHotkeys = new wxCheckBox( m_PageAdvanced, ID_ENABLEHOTKEY, wxT("Enable hotkey"), wxDefaultPosition, wxDefaultSize, 0 );
301 m_Radio_CopyEFBToRAM = new wxRadioButton( m_PageAdvanced, ID_EFBTORAM, wxT("To RAM (accuracy)"), wxDefaultPosition, wxDefaultSize, 0 );
302 m_Radio_CopyEFBToGL = new wxRadioButton( m_PageAdvanced, ID_EFBTOTEX, wxT("To texture (performance, resolution)"), wxDefaultPosition, wxDefaultSize, 0 );
303 m_WireFrame = new wxCheckBox( m_PageAdvanced, ID_WIREFRAME, wxT("Enable wireframe"), wxDefaultPosition, wxDefaultSize, 0 );
304 m_EnableRealXFB = new wxCheckBox( m_PageAdvanced, ID_ENABLEREALXFB, wxT("Enable real XFB"), wxDefaultPosition, wxDefaultSize, 0 );
305 m_EnableXFB = new wxCheckBox( m_PageAdvanced, ID_ENABLEXFB, wxT("Enable XFB"), wxDefaultPosition, wxDefaultSize, 0 );
306 m_UseNativeMips = new wxCheckBox( m_PageAdvanced, ID_USENATIVEMIPS, wxT("Use native mipmaps"), wxDefaultPosition, wxDefaultSize, 0 );
308 wxStaticBoxSizer* sbDataDumping;
309 sbDataDumping = new wxStaticBoxSizer( new wxStaticBox( m_PageAdvanced, wxID_ANY, wxT("Data dumping") ), wxVERTICAL );
310 m_DumpTextures = new wxCheckBox( m_PageAdvanced, ID_TEXDUMP, wxT("Dump textures"), wxDefaultPosition, wxDefaultSize, 0 );
311 m_DumpFrames = new wxCheckBox( m_PageAdvanced, ID_DUMPFRAMES, wxT("Dump frames To User/Dump/Frames"), wxDefaultPosition, wxDefaultSize, 0 );
313 wxStaticBoxSizer* sbDebuggingTools;
314 sbDebuggingTools = new wxStaticBoxSizer( new wxStaticBox( m_PageAdvanced, wxID_ANY, wxT("Debugging tools") ), wxVERTICAL );
315 m_OverlayStats = new wxCheckBox( m_PageAdvanced, ID_OVERLAYSTATS, wxT("Overlay some statistics"), wxDefaultPosition, wxDefaultSize, 0 );
316 m_ShaderErrors = new wxCheckBox( m_PageAdvanced, ID_SHADERERRORS, wxT("Show shader compilation errors"), wxDefaultPosition, wxDefaultSize, 0 );
317 m_TexfmtOverlay = new wxCheckBox( m_PageAdvanced, ID_TEXFMT_OVERLAY, wxT("Enable texture format overlay"), wxDefaultPosition, wxDefaultSize, 0 );
318 m_TexfmtCenter = new wxCheckBox( m_PageAdvanced, ID_TEXFMT_CENTER, wxT("Centered"), wxDefaultPosition, wxDefaultSize, 0 );
319 m_ProjStats = new wxCheckBox( m_PageAdvanced, wxID_ANY, wxT("Overlay projection stats"), wxDefaultPosition, wxDefaultSize, 0 );
321 // Sizers
322 wxBoxSizer* sAdvanced;
323 sAdvanced = new wxBoxSizer( wxVERTICAL );
325 wxGridBagSizer* sSettings;
326 sSettings = new wxGridBagSizer( 0, 0 );
327 sSettings->SetFlexibleDirection( wxBOTH );
328 sSettings->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
329 sSettings->Add( m_DisableFog, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
330 sSettings->Add( m_OverlayFPS, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT, 20 );
331 sSettings->Add( m_CopyEFB, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
332 sSettings->Add( m_EnableHotkeys, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT, 20 );
333 sSettings->Add( m_Radio_CopyEFBToRAM, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 10 );
334 sSettings->Add( m_Radio_CopyEFBToGL, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP, 10 );
335 sSettings->Add( m_WireFrame, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT, 20 );
336 sSettings->Add( m_EnableRealXFB, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxLEFT, 20 );
337 sSettings->Add( m_EnableXFB, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
338 sSettings->Add( m_UseNativeMips, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
339 sbSettings->Add( sSettings, 0, wxEXPAND, 5 );
340 sAdvanced->Add( sbSettings, 0, wxEXPAND|wxALL, 5 );
342 wxGridBagSizer* sDataDumping;
343 sDataDumping = new wxGridBagSizer( 0, 0 );
344 sDataDumping->SetFlexibleDirection( wxBOTH );
345 sDataDumping->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
346 sDataDumping->Add( m_DumpTextures, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
347 sDataDumping->Add( m_DumpFrames, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
348 sbDataDumping->Add( sDataDumping, 0, wxEXPAND, 5 );
349 sAdvanced->Add( sbDataDumping, 0, wxEXPAND|wxALL, 5 );
351 wxGridBagSizer* sDebuggingTools;
352 sDebuggingTools = new wxGridBagSizer( 0, 0 );
353 sDebuggingTools->SetFlexibleDirection( wxBOTH );
354 sDebuggingTools->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
355 sDebuggingTools->Add( m_OverlayStats, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
356 sDebuggingTools->Add( m_ShaderErrors, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
357 sDebuggingTools->Add( m_TexfmtOverlay, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALL, 5 );
358 sDebuggingTools->Add( m_TexfmtCenter, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
359 sDebuggingTools->Add( m_ProjStats, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
360 sbDebuggingTools->Add( sDebuggingTools, 0, wxEXPAND, 5 );
361 sAdvanced->Add( sbDebuggingTools, 0, wxEXPAND|wxALL, 5 );
363 m_PageAdvanced->SetSizer( sAdvanced );
364 m_PageAdvanced->Layout();
365 sAdvanced->Fit( m_PageAdvanced );
366 m_Notebook->AddPage( m_PageAdvanced, wxT("Advanced"), false );
368 sMain->Add( m_Notebook, 1, wxALL|wxEXPAND, 5 );
370 //Buttons
371 wxBoxSizer* sButtons;
372 sButtons = new wxBoxSizer( wxVERTICAL );
373 m_Close = new wxButton( this, ID_CLOSE, wxT("Close"), wxDefaultPosition, wxDefaultSize, 0 );
374 sButtons->Add( m_Close, 0, wxALL|wxEXPAND, 5 );
375 sMain->Add( sButtons, 0, wxALIGN_RIGHT, 5 );
377 this->SetSizer( sMain );
378 this->Layout();
380 InitializeGUIValues();
382 Fit();
383 Center();
384 UpdateGUI();
387 void GFXConfigDialogDX::DirectXSettingsChanged(wxCommandEvent& event)
389 switch (event.GetId())
391 case ID_ADAPTER:
392 g_Config.iAdapter = m_AdapterCB->GetSelection();
393 break;
394 case ID_VSYNC:
395 g_Config.bVSync = m_VSync->IsChecked();
396 break;
397 case ID_WIDESCREEN_HACK:
398 g_Config.bWidescreenHack = m_WidescreenHack->IsChecked();
399 break;
400 case ID_ASPECT:
401 g_Config.iAspectRatio = m_KeepAR->GetSelection();
402 break;
403 case ID_ANTIALIASMODE:
404 g_Config.iMultisampleMode = m_MSAAModeCB->GetSelection();
405 break;
406 case ID_EFBSCALEMODE:
407 g_Config.iEFBScale = m_EFBScaleMode->GetSelection();
408 break;
409 case ID_EFB_ACCESS_ENABLE:
410 g_Config.bEFBAccessEnable = m_EnableEFBAccess->IsChecked();
411 break;
412 case ID_SAFETEXTURECACHE:
413 g_Config.bSafeTextureCache = m_SafeTextureCache->IsChecked();
414 break;
415 case ID_RADIO_SAFETEXTURECACHE_SAFE:
416 g_Config.iSafeTextureCache_ColorSamples = 0;
417 break;
418 case ID_RADIO_SAFETEXTURECACHE_NORMAL:
419 if(g_Config.iSafeTextureCache_ColorSamples < 512)
420 g_Config.iSafeTextureCache_ColorSamples = 512;
421 break;
422 case ID_RADIO_SAFETEXTURECACHE_FAST:
423 if(g_Config.iSafeTextureCache_ColorSamples > 128 || g_Config.iSafeTextureCache_ColorSamples == 0)
424 g_Config.iSafeTextureCache_ColorSamples = 128;
425 break;
427 UpdateGUI();
430 void GFXConfigDialogDX::EnhancementsSettingsChanged(wxCommandEvent& event)
432 switch (event.GetId())
434 case ID_FORCEFILTERING:
435 g_Config.bForceFiltering = m_ForceFiltering->IsChecked();
436 break;
437 case ID_FORCEANISOTROPY:
438 g_Config.iMaxAnisotropy = m_MaxAnisotropy->IsChecked() ? 8 : 1;
439 break;
440 case ID_LOADHIRESTEXTURES:
441 g_Config.bHiresTextures = m_HiresTextures->IsChecked();
442 break;
443 case ID_EFBSCALEDCOPY:
444 g_Config.bCopyEFBScaled = m_EFBScaledCopy->IsChecked();
445 break;
447 UpdateGUI();
450 void GFXConfigDialogDX::AdvancedSettingsChanged(wxCommandEvent& event)
452 switch (event.GetId())
454 case ID_DISABLEFOG:
455 g_Config.bDisableFog = m_DisableFog->IsChecked();
456 break;
457 case ID_OVERLAYFPS:
458 g_Config.bShowFPS = m_OverlayFPS->IsChecked();
459 break;
460 case ID_ENABLEEFBCOPY:
461 g_Config.bEFBCopyDisable = !m_CopyEFB->IsChecked();
462 break;
463 case ID_EFBTORAM:
464 g_Config.bCopyEFBToTexture = false;
465 break;
466 case ID_EFBTOTEX:
467 g_Config.bCopyEFBToTexture = true;
468 break;
469 case ID_ENABLEHOTKEY:
470 g_Config.bOSDHotKey = m_EnableHotkeys->IsChecked();
471 break;
472 case ID_WIREFRAME:
473 g_Config.bWireFrame = m_WireFrame->IsChecked();
474 break;
475 case ID_ENABLEXFB:
476 g_Config.bUseXFB = m_EnableXFB->IsChecked();
477 break;
478 case ID_ENABLEREALXFB:
479 g_Config.bUseRealXFB = m_EnableRealXFB->IsChecked();
480 break;
481 case ID_USENATIVEMIPS:
482 g_Config.bUseNativeMips = m_UseNativeMips->IsChecked();
483 break;
484 case ID_TEXDUMP:
485 g_Config.bDumpTextures = m_DumpTextures->IsChecked();
486 break;
487 case ID_DUMPFRAMES:
488 g_Config.bDumpFrames = m_DumpFrames->IsChecked();
489 break;
490 case ID_OVERLAYSTATS:
491 g_Config.bOverlayStats = m_OverlayStats->IsChecked();
492 break;
493 case ID_PROJSTATS:
494 g_Config.bOverlayProjStats = m_ProjStats->IsChecked();
495 break;
496 case ID_SHADERERRORS:
497 g_Config.bShowShaderErrors = m_ShaderErrors->IsChecked();
498 break;
499 case ID_TEXFMT_OVERLAY:
500 g_Config.bTexFmtOverlayEnable = m_TexfmtOverlay->IsChecked();
501 break;
502 case ID_TEXFMT_CENTER:
503 g_Config.bTexFmtOverlayCenter = m_TexfmtCenter->IsChecked();
504 break;
506 UpdateGUI();
509 void GFXConfigDialogDX::CloseWindow()
511 // Save the config to INI
512 g_Config.Save((std::string(File::GetUserPath(D_CONFIG_IDX)) + "gfx_dx9.ini").c_str());
513 EndModal(1);
516 void GFXConfigDialogDX::UpdateGUI()
518 if (g_Config.bUseRealXFB)
520 // must use XFB to use real XFB
521 g_Config.bUseXFB = true;
522 m_EnableXFB->SetValue(true);
524 m_EnableXFB->Enable(!g_Config.bUseRealXFB);
525 m_TexfmtCenter->Enable(g_Config.bTexFmtOverlayEnable);
527 // Disable the Copy to options when EFBCopy is disabled
528 m_Radio_CopyEFBToRAM->Enable(!g_Config.bEFBCopyDisable);
529 m_Radio_CopyEFBToGL->Enable(!g_Config.bEFBCopyDisable);
531 // Disable/Enable Safe Texture Cache options
532 m_Radio_SafeTextureCache_Safe->Enable(g_Config.bSafeTextureCache);
533 m_Radio_SafeTextureCache_Normal->Enable(g_Config.bSafeTextureCache);
534 m_Radio_SafeTextureCache_Fast->Enable(g_Config.bSafeTextureCache);