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/
20 #include <wx/filepicker.h>
21 #include <wx/gbsizer.h>
22 #include <wx/notebook.h>
23 #include <wx/mimetype.h>
25 #include "DlgSettings.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
)
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
)
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
)
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
)
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
85 GFXConfigDialogDX::~GFXConfigDialogDX()
87 INFO_LOG(CONSOLE
, "GFXConfigDialogDX closed");
90 void GFXConfigDialogDX::OnClose(wxCloseEvent
& event
)
92 //INFO_LOG(CONSOLE, "OnClose");
96 void GFXConfigDialogDX::CloseClick(wxCommandEvent
& WXUNUSED (event
))
98 //INFO_LOG(CONSOLE, "CloseClick");
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);
117 if(g_Config
.iSafeTextureCache_ColorSamples
> 128)
118 m_Radio_SafeTextureCache_Normal
->SetValue(true);
120 m_Radio_SafeTextureCache_Fast
->SetValue(true);
123 if(g_Config
.iMaxAnisotropy
== 1)
124 m_MaxAnisotropy
->SetValue(false);
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
);
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
) );
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
);
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 );
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 );
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 );
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 );
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 );
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 );
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
);
380 InitializeGUIValues();
387 void GFXConfigDialogDX::DirectXSettingsChanged(wxCommandEvent
& event
)
389 switch (event
.GetId())
392 g_Config
.iAdapter
= m_AdapterCB
->GetSelection();
395 g_Config
.bVSync
= m_VSync
->IsChecked();
397 case ID_WIDESCREEN_HACK
:
398 g_Config
.bWidescreenHack
= m_WidescreenHack
->IsChecked();
401 g_Config
.iAspectRatio
= m_KeepAR
->GetSelection();
403 case ID_ANTIALIASMODE
:
404 g_Config
.iMultisampleMode
= m_MSAAModeCB
->GetSelection();
406 case ID_EFBSCALEMODE
:
407 g_Config
.iEFBScale
= m_EFBScaleMode
->GetSelection();
409 case ID_EFB_ACCESS_ENABLE
:
410 g_Config
.bEFBAccessEnable
= m_EnableEFBAccess
->IsChecked();
412 case ID_SAFETEXTURECACHE
:
413 g_Config
.bSafeTextureCache
= m_SafeTextureCache
->IsChecked();
415 case ID_RADIO_SAFETEXTURECACHE_SAFE
:
416 g_Config
.iSafeTextureCache_ColorSamples
= 0;
418 case ID_RADIO_SAFETEXTURECACHE_NORMAL
:
419 if(g_Config
.iSafeTextureCache_ColorSamples
< 512)
420 g_Config
.iSafeTextureCache_ColorSamples
= 512;
422 case ID_RADIO_SAFETEXTURECACHE_FAST
:
423 if(g_Config
.iSafeTextureCache_ColorSamples
> 128 || g_Config
.iSafeTextureCache_ColorSamples
== 0)
424 g_Config
.iSafeTextureCache_ColorSamples
= 128;
430 void GFXConfigDialogDX::EnhancementsSettingsChanged(wxCommandEvent
& event
)
432 switch (event
.GetId())
434 case ID_FORCEFILTERING
:
435 g_Config
.bForceFiltering
= m_ForceFiltering
->IsChecked();
437 case ID_FORCEANISOTROPY
:
438 g_Config
.iMaxAnisotropy
= m_MaxAnisotropy
->IsChecked() ? 8 : 1;
440 case ID_LOADHIRESTEXTURES
:
441 g_Config
.bHiresTextures
= m_HiresTextures
->IsChecked();
443 case ID_EFBSCALEDCOPY
:
444 g_Config
.bCopyEFBScaled
= m_EFBScaledCopy
->IsChecked();
450 void GFXConfigDialogDX::AdvancedSettingsChanged(wxCommandEvent
& event
)
452 switch (event
.GetId())
455 g_Config
.bDisableFog
= m_DisableFog
->IsChecked();
458 g_Config
.bShowFPS
= m_OverlayFPS
->IsChecked();
460 case ID_ENABLEEFBCOPY
:
461 g_Config
.bEFBCopyDisable
= !m_CopyEFB
->IsChecked();
464 g_Config
.bCopyEFBToTexture
= false;
467 g_Config
.bCopyEFBToTexture
= true;
469 case ID_ENABLEHOTKEY
:
470 g_Config
.bOSDHotKey
= m_EnableHotkeys
->IsChecked();
473 g_Config
.bWireFrame
= m_WireFrame
->IsChecked();
476 g_Config
.bUseXFB
= m_EnableXFB
->IsChecked();
478 case ID_ENABLEREALXFB
:
479 g_Config
.bUseRealXFB
= m_EnableRealXFB
->IsChecked();
481 case ID_USENATIVEMIPS
:
482 g_Config
.bUseNativeMips
= m_UseNativeMips
->IsChecked();
485 g_Config
.bDumpTextures
= m_DumpTextures
->IsChecked();
488 g_Config
.bDumpFrames
= m_DumpFrames
->IsChecked();
490 case ID_OVERLAYSTATS
:
491 g_Config
.bOverlayStats
= m_OverlayStats
->IsChecked();
494 g_Config
.bOverlayProjStats
= m_ProjStats
->IsChecked();
496 case ID_SHADERERRORS
:
497 g_Config
.bShowShaderErrors
= m_ShaderErrors
->IsChecked();
499 case ID_TEXFMT_OVERLAY
:
500 g_Config
.bTexFmtOverlayEnable
= m_TexfmtOverlay
->IsChecked();
502 case ID_TEXFMT_CENTER
:
503 g_Config
.bTexFmtOverlayCenter
= m_TexfmtCenter
->IsChecked();
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());
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
);