Imported Upstream version 2.81
[platform/upstream/libbullet.git] / Demos / DX11ClothDemo / DXUT / Optional / DXUTsettingsdlg.cpp
1 //--------------------------------------------------------------------------------------\r
2 // File: DXUTSettingsDlg.cpp\r
3 //\r
4 // Dialog for selection of device settings \r
5 //\r
6 // Copyright (c) Microsoft Corporation. All rights reserved\r
7 //--------------------------------------------------------------------------------------\r
8 #include "DXUT.h"\r
9 #include "DXUTgui.h"\r
10 #include "DXUTsettingsDlg.h"\r
11 #undef min // use __min instead\r
12 #undef max // use __max instead\r
13 \r
14 \r
15 //--------------------------------------------------------------------------------------\r
16 // Internal functions forward declarations\r
17 //--------------------------------------------------------------------------------------\r
18 WCHAR*              DXUTAPIVersionToString( DXUTDeviceVersion version );\r
19 WCHAR*              DXUTPresentIntervalToString( UINT pi );\r
20 WCHAR*              DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType );\r
21 WCHAR*              DXUTD3DDeviceTypeToString( D3DDEVTYPE devType );\r
22 WCHAR*              DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType );\r
23 WCHAR*              DXUTVertexProcessingTypeToString( DWORD vpt );\r
24 \r
25 \r
26 HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0)  );\r
27 \r
28 //--------------------------------------------------------------------------------------\r
29 // Global state\r
30 //--------------------------------------------------------------------------------------\r
31 DXUTDeviceSettings  g_DeviceSettings;\r
32 \r
33 CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog()\r
34 {\r
35     // Using an accessor function gives control of the construction order\r
36     static CD3DSettingsDlg dlg;\r
37     return &dlg;\r
38 }\r
39 \r
40 \r
41 //--------------------------------------------------------------------------------------\r
42 CD3DSettingsDlg::CD3DSettingsDlg()\r
43 {\r
44     m_pStateBlock = NULL;\r
45     m_bActive = false;\r
46     m_pActiveDialog = NULL;\r
47     \r
48     m_Levels[0] = D3D_FEATURE_LEVEL_9_1;\r
49     m_Levels[1] = D3D_FEATURE_LEVEL_9_2;\r
50     m_Levels[2] = D3D_FEATURE_LEVEL_9_3;\r
51     m_Levels[3] = D3D_FEATURE_LEVEL_10_0;\r
52     m_Levels[4] = D3D_FEATURE_LEVEL_10_1;\r
53     m_Levels[5] = D3D_FEATURE_LEVEL_11_0;\r
54     \r
55 }\r
56 \r
57 \r
58 //--------------------------------------------------------------------------------------\r
59 CD3DSettingsDlg::~CD3DSettingsDlg()\r
60 {\r
61     // Release the memory used to hold the D3D11 refresh data in the combo box\r
62     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE );\r
63     if( pComboBox )\r
64         for( UINT i = 0; i < pComboBox->GetNumItems(); ++i )\r
65         {\r
66             DXGI_RATIONAL* pRate = reinterpret_cast<DXGI_RATIONAL*>( pComboBox->GetItemData( i ) );\r
67             delete pRate;\r
68         }\r
69 }\r
70 \r
71 \r
72 //--------------------------------------------------------------------------------------\r
73 void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager )\r
74 {\r
75     assert( pManager );\r
76     m_Dialog.Init( pManager, false );  // Don't register this dialog.\r
77     m_RevertModeDialog.Init( pManager, false ); // Don't register this dialog.\r
78     m_pActiveDialog = &m_Dialog;\r
79     CreateControls();\r
80 }\r
81 \r
82 //--------------------------------------------------------------------------------------\r
83 void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName )\r
84 {\r
85     assert( pManager );\r
86     m_Dialog.Init( pManager, false, szControlTextureFileName );  // Don't register this dialog.\r
87     m_RevertModeDialog.Init( pManager, false, szControlTextureFileName );   // Don't register this dialog.\r
88     m_pActiveDialog = &m_Dialog;\r
89     CreateControls();\r
90 }\r
91 \r
92 \r
93 //--------------------------------------------------------------------------------------\r
94 void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename,\r
95                             HMODULE hModule )\r
96 {\r
97     assert( pManager );\r
98     m_Dialog.Init( pManager, false, pszControlTextureResourcename, hModule );  // Don't register this dialog.\r
99     m_RevertModeDialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog\r
100     m_pActiveDialog = &m_Dialog;\r
101     CreateControls();\r
102 }\r
103 \r
104 \r
105 //--------------------------------------------------------------------------------------\r
106 void CD3DSettingsDlg::CreateControls()\r
107 {\r
108     // Set up main settings dialog\r
109     m_Dialog.EnableKeyboardInput( true );\r
110     m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL );\r
111     m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD );\r
112 \r
113     // Right-justify static controls\r
114     CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 );\r
115     if( pElement )\r
116     {\r
117         pElement->dwTextFormat = DT_VCENTER | DT_RIGHT;\r
118 \r
119         // Title\r
120         CDXUTStatic* pStatic = NULL;\r
121         m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic );\r
122         pElement = pStatic->GetElement( 0 );\r
123         pElement->iFont = 1;\r
124         pElement->dwTextFormat = DT_TOP | DT_LEFT;\r
125     }\r
126 \r
127     // DXUTSETTINGSDLG_API_VERSION\r
128     m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"API Version", 10, 35, 180, 23 );\r
129     m_Dialog.AddComboBox( DXUTSETTINGSDLG_API_VERSION, 200, 35, 300, 23 );\r
130 \r
131 \r
132     //DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL\r
133     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL, L"Feature Level", 10, 60, 180, 23 );\r
134     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL, 200, 60, 300, 23 );\r
135     m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetDropHeight( 106 );\r
136 \r
137 \r
138     // DXUTSETTINGSDLG_ADAPTER\r
139     m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 85, 180, 23 );\r
140     m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 85, 300, 23 );\r
141 \r
142     // DXUTSETTINGSDLG_DEVICE_TYPE\r
143     m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 110, 180, 23 );\r
144     m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 110, 300, 23 );\r
145 \r
146     // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN\r
147     m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors",\r
148                           250, 136, 500, 16 );\r
149     m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", \r
150                           360, 157, 100, 16 );\r
151     m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen",\r
152                           220, 157, 100, 16 );\r
153 \r
154     // DXUTSETTINGSDLG_ADAPTER_FORMAT\r
155     m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 175, 180, 23 );\r
156     m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 175, 300, 23 );\r
157 \r
158     // DXUTSETTINGSDLG_RESOLUTION\r
159     m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 );\r
160     m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 200, 200, 23 );\r
161     m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 );\r
162 \r
163     // DXUTSETTINGSDLG_RES_SHOW_ALL\r
164     m_Dialog.AddCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, L"Show All Aspect Ratios", 420, 200, 200, 23, false );\r
165 \r
166     // DXUTSETTINGSDLG_REFRESH_RATE\r
167     m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 );\r
168     m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 225, 300, 23 );\r
169 \r
170     // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT\r
171     m_Dialog.AddStatic( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 );\r
172     m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 260, 300, 23 );\r
173 \r
174     // DXUTSETTINGSDLG_DEPTH_STENCIL\r
175     m_Dialog.AddStatic( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL, L"Depth/Stencil Format", 10, 285, 180, 23 );\r
176     m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 285, 300, 23 );\r
177 \r
178     // DXUTSETTINGSDLG_MULTISAMPLE_TYPE\r
179     m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL, L"Multisample Type", 10, 310, 180, 23 );\r
180     m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 310, 300, 23 );\r
181 \r
182     // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY\r
183     m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 335, 180, 23 );\r
184     m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 335, 300, 23 );\r
185 \r
186     // DXUTSETTINGSDLG_VERTEX_PROCESSING\r
187     m_Dialog.AddStatic( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL, L"Vertex Processing", 10, 360, 180, 23 );\r
188     m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 360, 300, 23 );\r
189 \r
190     // DXUTSETTINGSDLG_PRESENT_INTERVAL\r
191     m_Dialog.AddStatic( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 385, 180, 23 );\r
192     m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 385, 300, 23 );\r
193 \r
194     // DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT\r
195     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, L"Adapter Output", 10, 175, 180, 23 );\r
196     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, 200, 175, 300, 23 );\r
197 \r
198     // DXUTSETTINGSDLG_D3D11_RESOLUTION\r
199     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 );\r
200     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION, 200, 200, 200, 23 );\r
201     m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetDropHeight( 106 );\r
202 \r
203     // DXUTSETTINGSDLG_D3D11_REFRESH_RATE\r
204     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 );\r
205     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, 200, 225, 300, 23 );\r
206 \r
207     // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT\r
208     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 );\r
209     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT, 200, 260, 300, 23 );\r
210 \r
211     // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT\r
212     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL, L"Multisample Count", 10, 285, 180, 23 );\r
213     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT, 200, 285, 300, 23 );\r
214 \r
215     // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY\r
216     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 310, 180, 23 );\r
217     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY, 200, 310, 300, 23 );\r
218 \r
219     // DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL\r
220     m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 335, 180, 23 );\r
221     m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL, 200, 335, 300, 23 );\r
222 \r
223     // DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE\r
224     m_Dialog.AddCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE, L"Create Debug Device", 200, 365, 180, 23 );\r
225 \r
226     // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL\r
227     m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 440, 73, 31 );\r
228     m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 440, 73, 31, 0, true );\r
229 \r
230     // Set up mode change dialog\r
231     m_RevertModeDialog.EnableKeyboardInput( true );\r
232     m_RevertModeDialog.EnableNonUserEvents( true );\r
233     m_RevertModeDialog.SetFont( 0, L"Arial", 15, FW_NORMAL );\r
234     m_RevertModeDialog.SetFont( 1, L"Arial", 28, FW_BOLD );\r
235 \r
236     pElement = m_RevertModeDialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 );\r
237     if( pElement )\r
238     {\r
239         pElement->dwTextFormat = DT_VCENTER | DT_RIGHT;\r
240 \r
241         // Title\r
242         CDXUTStatic* pStatic = NULL;\r
243         m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Do you want to keep these display settings?", 10, 5,\r
244                                       640, 50, false, &pStatic );\r
245         pElement = pStatic->GetElement( 0 );\r
246         pElement->iFont = 1;\r
247         pElement->dwTextFormat = DT_TOP | DT_LEFT;\r
248 \r
249         // Timeout static text control\r
250         m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT, L"", 10, 90, 640, 30,\r
251                                       false, &pStatic );\r
252         pElement = pStatic->GetElement( 0 );\r
253         pElement->iFont = 0;\r
254         pElement->dwTextFormat = DT_TOP | DT_LEFT;\r
255     }\r
256 \r
257     // DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, DXUTSETTINGSDLG_MODE_CHANGE_REVERT\r
258     m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, L"Yes", 230, 50, 73, 31 );\r
259     m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_REVERT, L"No", 315, 50, 73, 31, 0, true );\r
260 }\r
261 \r
262 \r
263 //--------------------------------------------------------------------------------------\r
264 HRESULT CD3DSettingsDlg::OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice )\r
265 {\r
266     if( pd3dDevice == NULL )\r
267         return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG );\r
268 \r
269     // Create the fonts/textures \r
270     m_Dialog.SetCallback( StaticOnEvent, ( void* )this );\r
271     m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this );\r
272 \r
273     return S_OK;\r
274 }\r
275 \r
276 \r
277 //--------------------------------------------------------------------------------------\r
278 // Changes the UI defaults to the current device settings\r
279 //--------------------------------------------------------------------------------------\r
280 HRESULT CD3DSettingsDlg::Refresh()\r
281 {\r
282     HRESULT hr = S_OK;\r
283 \r
284     g_DeviceSettings = DXUTGetDeviceSettings();\r
285 \r
286     CDXUTComboBox* pAPIComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION );\r
287     pAPIComboBox->RemoveAllItems();\r
288     if( DXUTDoesAppSupportD3D9() )\r
289     {\r
290         // Ensure that at least one adapter got enumerated.\r
291         CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
292         if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 )\r
293             AddAPIVersion( DXUT_D3D9_DEVICE );\r
294     }\r
295     if( DXUTDoesAppSupportD3D11() && DXUTIsD3D11Available() )\r
296     {\r
297         // Ensure that at least one adapter got enumerated.\r
298         CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
299         if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 )\r
300             AddAPIVersion( DXUT_D3D11_DEVICE );\r
301     }\r
302 \r
303     // If no API has been added, something has gone wrong.  Exit the dialog.\r
304     if( pAPIComboBox->GetNumItems() == 0 )\r
305     {\r
306         SetActive( false );\r
307         return S_OK;\r
308     }\r
309 \r
310     pAPIComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.ver ) );\r
311 \r
312     switch( g_DeviceSettings.ver )\r
313     {\r
314         case DXUT_D3D9_DEVICE:\r
315         {\r
316             // Show all D3D9-specific controls and hide controls for all other D3D versions.\r
317             ShowControlSet( DXUT_D3D9_DEVICE );\r
318 \r
319             CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
320 \r
321             // Fill the UI with the current settings\r
322             AddDeviceType( g_DeviceSettings.d3d9.DeviceType );\r
323             SetWindowed( FALSE != g_DeviceSettings.d3d9.pp.Windowed );\r
324             SetDeviceClip( 0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) );\r
325             AddAdapterFormat( g_DeviceSettings.d3d9.AdapterFormat );\r
326             AddResolution( g_DeviceSettings.d3d9.pp.BackBufferWidth, g_DeviceSettings.d3d9.pp.BackBufferHeight );\r
327             AddRefreshRate( g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz );\r
328             AddBackBufferFormat( g_DeviceSettings.d3d9.pp.BackBufferFormat );\r
329             AddDepthStencilBufferFormat( g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat );\r
330             AddMultisampleType( g_DeviceSettings.d3d9.pp.MultiSampleType );\r
331             AddMultisampleQuality( g_DeviceSettings.d3d9.pp.MultiSampleQuality );\r
332 \r
333             if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE )\r
334                 AddVertexProcessingType( D3DCREATE_PUREDEVICE );\r
335             else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )\r
336                 AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING );\r
337             else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )\r
338                 AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING );\r
339             else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING )\r
340                 AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING );\r
341 \r
342             CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo(\r
343                 g_DeviceSettings.d3d9.AdapterOrdinal, g_DeviceSettings.d3d9.DeviceType,\r
344                 g_DeviceSettings.d3d9.AdapterFormat, g_DeviceSettings.d3d9.pp.BackBufferFormat,\r
345                 ( g_DeviceSettings.d3d9.pp.Windowed != 0 ) );\r
346             if( NULL == pBestDeviceSettingsCombo )\r
347                 return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG );\r
348 \r
349             // Get the adapters list from CD3D9Enumeration object\r
350             CGrowableArray <CD3D9EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();\r
351 \r
352             if( pAdapterInfoList->GetSize() == 0 )\r
353                 return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES );\r
354 \r
355             CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
356             pAdapterCombo->RemoveAllItems();\r
357 \r
358             // Add adapters\r
359             for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ )\r
360             {\r
361                 CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter );\r
362                 AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );\r
363             }\r
364 \r
365             pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) );\r
366 \r
367             hr = OnAPIVersionChanged( true );\r
368             if( FAILED( hr ) )\r
369                 return hr;\r
370 \r
371             //m_Dialog.Refresh();\r
372             CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() );\r
373             break;\r
374         }\r
375         case DXUT_D3D11_DEVICE:\r
376         {\r
377             // Show all D3D11-specific controls and hide controls for all other D3D versions.\r
378             ShowControlSet( DXUT_D3D11_DEVICE );\r
379 \r
380             CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
381 \r
382             // Fill the UI with the current settings\r
383             AddD3D11DeviceType( g_DeviceSettings.d3d11.DriverType );\r
384             SetWindowed( FALSE != g_DeviceSettings.d3d11.sd.Windowed );\r
385             CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo();\r
386             AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, g_DeviceSettings.d3d11.Output );\r
387             \r
388 \r
389 \r
390             AddD3D11Resolution( g_DeviceSettings.d3d11.sd.BufferDesc.Width,\r
391                                 g_DeviceSettings.d3d11.sd.BufferDesc.Height );\r
392             AddD3D11RefreshRate( g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate );\r
393             AddD3D11BackBufferFormat( g_DeviceSettings.d3d11.sd.BufferDesc.Format );\r
394             AddD3D11MultisampleCount( g_DeviceSettings.d3d11.sd.SampleDesc.Count );\r
395             AddD3D11MultisampleQuality( g_DeviceSettings.d3d11.sd.SampleDesc.Quality );\r
396 \r
397             CD3D11EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo(\r
398                 g_DeviceSettings.d3d11.AdapterOrdinal, g_DeviceSettings.d3d11.DriverType,\r
399                 g_DeviceSettings.d3d11.Output, g_DeviceSettings.d3d11.sd.BufferDesc.Format,\r
400                 ( g_DeviceSettings.d3d11.sd.Windowed != 0 ) );\r
401 \r
402             if( NULL == pBestDeviceSettingsCombo )\r
403                 return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG );\r
404 \r
405             CDXUTComboBox *pFeatureLevelBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL );\r
406             pFeatureLevelBox->RemoveAllItems();\r
407             for (int fli = 0; fli < TOTAL_FEATURE_LEVLES; fli++) {\r
408                 if (m_Levels[fli] >= g_DeviceSettings.MinimumFeatureLevel \r
409                     && m_Levels[fli] <=pBestDeviceSettingsCombo->pDeviceInfo->MaxLevel) {\r
410                      AddD3D11FeatureLevel( m_Levels[fli] );\r
411                 }\r
412             } \r
413             pFeatureLevelBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DeviceFeatureLevel ) );\r
414 \r
415             \r
416             // Get the adapters list from CD3D11Enumeration object\r
417             CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();\r
418 \r
419             if( pAdapterInfoList->GetSize() == 0 )\r
420                 return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES );\r
421 \r
422             CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
423             pAdapterCombo->RemoveAllItems();\r
424 \r
425             // Add adapters\r
426             for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ )\r
427             {\r
428                 CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter );\r
429                 AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );\r
430             }\r
431 \r
432             pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) );\r
433 \r
434             hr = OnAPIVersionChanged( true );\r
435             if( FAILED( hr ) )\r
436                 return hr;\r
437 \r
438             //m_Dialog.Refresh();\r
439             CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() );\r
440             break;\r
441         }\r
442     }\r
443 \r
444     return S_OK;\r
445 }\r
446 \r
447 \r
448 //--------------------------------------------------------------------------------------\r
449 HRESULT CD3DSettingsDlg::OnD3D9ResetDevice()\r
450 {\r
451     const D3DSURFACE_DESC* pDesc = DXUTGetD3D9BackBufferSurfaceDesc();\r
452     m_Dialog.SetLocation( 0, 0 );\r
453     m_Dialog.SetSize( pDesc->Width, pDesc->Height );\r
454     m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ),\r
455                                   D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
456                                   D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
457                                   D3DCOLOR_ARGB( 255, 10, 73, 179 ) );\r
458 \r
459     m_RevertModeDialog.SetLocation( 0, 0 );\r
460     m_RevertModeDialog.SetSize( pDesc->Width, pDesc->Height );\r
461     m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ),\r
462                                             D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
463                                             D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
464                                             D3DCOLOR_ARGB( 255, 10, 73, 179 ) );\r
465 \r
466     IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device();\r
467     pd3dDevice->BeginStateBlock();\r
468     pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );\r
469     pd3dDevice->EndStateBlock( &m_pStateBlock );\r
470 \r
471     return S_OK;\r
472 }\r
473 \r
474 //--------------------------------------------------------------------------------------\r
475 void CD3DSettingsDlg::SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate )\r
476 {\r
477     CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE );\r
478 \r
479     for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i )\r
480     {\r
481         DXGI_RATIONAL* pRate = ( DXGI_RATIONAL* )pRefreshRateComboBox->GetItemData( i );\r
482 \r
483         if( pRate && pRate->Numerator == RefreshRate.Numerator && pRate->Denominator == RefreshRate.Denominator )\r
484         {\r
485             pRefreshRateComboBox->SetSelectedByIndex( i );\r
486             return;\r
487         }\r
488     }\r
489 }\r
490 \r
491 //--------------------------------------------------------------------------------------\r
492 void CD3DSettingsDlg::OnRender( float fElapsedTime )\r
493 {\r
494     if( DXUTGetD3D11Device() )\r
495         OnRender11( fElapsedTime );\r
496     else\r
497         OnRender9( fElapsedTime );\r
498 }\r
499 \r
500 \r
501 //--------------------------------------------------------------------------------------\r
502 void CD3DSettingsDlg::OnRender9( float fElapsedTime )\r
503 {\r
504     IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device();\r
505 \r
506     // Clear the render target and the zbuffer \r
507     pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0x00003F3F, 1.0f, 0 );\r
508 \r
509     // Render the scene\r
510     if( SUCCEEDED( pd3dDevice->BeginScene() ) )\r
511     {\r
512         m_pStateBlock->Capture();\r
513         pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID );\r
514         m_pActiveDialog->OnRender( fElapsedTime );\r
515         m_pStateBlock->Apply();\r
516         pd3dDevice->EndScene();\r
517     }\r
518 }\r
519 \r
520 \r
521 \r
522 //--------------------------------------------------------------------------------------\r
523 void CD3DSettingsDlg::OnRender11( float fElapsedTime )\r
524 {\r
525     // Render the scene\r
526     m_pActiveDialog->OnRender( fElapsedTime );\r
527 }\r
528 \r
529 \r
530 //--------------------------------------------------------------------------------------\r
531 LRESULT CD3DSettingsDlg::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam )\r
532 {\r
533     m_pActiveDialog->MsgProc( hWnd, uMsg, wParam, lParam );\r
534     if( uMsg == WM_KEYDOWN && wParam == VK_F2 )\r
535         SetActive( false );\r
536     return 0;\r
537 }\r
538 \r
539 \r
540 //--------------------------------------------------------------------------------------\r
541 void CD3DSettingsDlg::OnD3D9LostDevice()\r
542 {\r
543     SAFE_RELEASE( m_pStateBlock );\r
544 }\r
545 \r
546 \r
547 //--------------------------------------------------------------------------------------\r
548 void CD3DSettingsDlg::OnD3D9DestroyDevice()\r
549 {\r
550 }\r
551 \r
552 \r
553 \r
554 //--------------------------------------------------------------------------------------\r
555 HRESULT CD3DSettingsDlg::OnD3D11CreateDevice( ID3D11Device* pd3dDevice )\r
556 {\r
557     //HRESULT hr;\r
558 \r
559     if( pd3dDevice == NULL )\r
560         return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG );\r
561 \r
562     // Create the fonts/textures \r
563     m_Dialog.SetCallback( StaticOnEvent, ( void* )this );\r
564     m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this );\r
565 \r
566     return S_OK;\r
567 }\r
568 \r
569 \r
570 //--------------------------------------------------------------------------------------\r
571 HRESULT CD3DSettingsDlg::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice,\r
572                                                   const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc )\r
573 {\r
574     m_Dialog.SetLocation( 0, 0 );\r
575     m_Dialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height );\r
576     m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ),\r
577                                   D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
578                                   D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
579                                   D3DCOLOR_ARGB( 255, 10, 73, 179 ) );\r
580 \r
581     m_RevertModeDialog.SetLocation( 0, 0 );\r
582     m_RevertModeDialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height );\r
583     m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ),\r
584                                             D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
585                                             D3DCOLOR_ARGB( 255, 54, 105, 192 ),\r
586                                             D3DCOLOR_ARGB( 255, 10, 73, 179 ) );\r
587 \r
588     return S_OK;\r
589 }\r
590 \r
591 \r
592 //--------------------------------------------------------------------------------------\r
593 void CD3DSettingsDlg::OnD3D11DestroyDevice()\r
594 {\r
595 \r
596 \r
597 }\r
598 \r
599 //--------------------------------------------------------------------------------------\r
600 void CD3DSettingsDlg::ShowControlSet( DXUTDeviceVersion ver )\r
601 {\r
602     switch( ver )\r
603     {\r
604         case DXUT_D3D9_DEVICE:\r
605             \r
606             m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( true );\r
607             m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( true );\r
608             m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( true );\r
609             m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( true );\r
610             m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( true );\r
611             m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( true );\r
612             m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( true );\r
613             m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true );\r
614             m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( true );\r
615             m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( true );\r
616             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( true );\r
617             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( true );\r
618             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( true );\r
619             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true );\r
620             m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( true );\r
621             m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( true );\r
622             m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( true );\r
623             m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( true );\r
624             m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( true );\r
625             \r
626             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( false );\r
627             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( false );\r
628             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( false );\r
629             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( false );\r
630             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( false );\r
631             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( false );\r
632             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( false );\r
633             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( false );\r
634             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( false );\r
635             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false );\r
636             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( false );\r
637             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( false );\r
638             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( false );\r
639             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false );\r
640             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( false );\r
641             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( false );\r
642             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( false );\r
643 \r
644             break;\r
645 \r
646         case DXUT_D3D11_DEVICE:\r
647             m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( false );\r
648             m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( false );\r
649             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( true );\r
650             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( true );\r
651             m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( false );\r
652             m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( false );\r
653             m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( false );\r
654             m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( false );\r
655             m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( false );\r
656             m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false );\r
657             m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( false );\r
658             m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( false );\r
659             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( false );\r
660             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( false );\r
661             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( false );\r
662             m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false );\r
663             m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( false );\r
664             m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( false );\r
665             m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( false );\r
666             m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( false );\r
667             m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( false );\r
668 \r
669             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( true );\r
670             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( true );\r
671             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( true );\r
672             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( true );\r
673             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( true );\r
674             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( true );\r
675             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( true );\r
676             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true );\r
677             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( true );\r
678             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( true );\r
679             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( true );\r
680             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true );\r
681             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( true );\r
682             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( true );\r
683             m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( true );\r
684             break;\r
685     }\r
686 }\r
687 \r
688 \r
689 //--------------------------------------------------------------------------------------\r
690 void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID,\r
691                                             CDXUTControl* pControl, void* pUserData )\r
692 {\r
693     CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserData;\r
694     if( pD3DSettings )\r
695         pD3DSettings->OnEvent( nEvent, nControlID, pControl );\r
696 }\r
697 \r
698 //--------------------------------------------------------------------------------------\r
699 // Name: CD3DSettingsDlg::StaticOnModeChangeTimer()\r
700 // Desc: Timer callback registered by a call to DXUTSetTimer.  It is called each second\r
701 //       until mode change timeout limit.\r
702 //--------------------------------------------------------------------------------------\r
703 void WINAPI CD3DSettingsDlg::StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext )\r
704 {\r
705     CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserContext;\r
706     assert( pD3DSettings );\r
707     assert( pD3DSettings->m_pActiveDialog == &pD3DSettings->m_RevertModeDialog );\r
708     assert( pD3DSettings->m_nIDEvent == nIDEvent );\r
709 \r
710     if( 0 == --pD3DSettings->m_nRevertModeTimeout )\r
711     {\r
712         CDXUTControl* pControl = pD3DSettings->m_RevertModeDialog.GetControl( DXUTSETTINGSDLG_MODE_CHANGE_REVERT );\r
713         assert( pControl );\r
714         pD3DSettings->m_RevertModeDialog.SendEvent( EVENT_BUTTON_CLICKED, false, pControl );\r
715     }\r
716     pD3DSettings->UpdateModeChangeTimeoutText( pD3DSettings->m_nRevertModeTimeout );\r
717 }\r
718 \r
719 //--------------------------------------------------------------------------------------\r
720 void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID,\r
721                                CDXUTControl* pControl )\r
722 {\r
723     switch( nControlID )\r
724     {\r
725         case DXUTSETTINGSDLG_ADAPTER:\r
726             OnAdapterChanged(); break;\r
727         case DXUTSETTINGSDLG_DEVICE_TYPE:\r
728             OnDeviceTypeChanged(); break;\r
729         case DXUTSETTINGSDLG_WINDOWED:\r
730             OnWindowedFullScreenChanged(); break;\r
731         case DXUTSETTINGSDLG_FULLSCREEN:\r
732             OnWindowedFullScreenChanged(); break;\r
733         case DXUTSETTINGSDLG_ADAPTER_FORMAT:\r
734             OnAdapterFormatChanged(); break;\r
735         case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL:\r
736         {\r
737             if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )\r
738             {\r
739                 OnAdapterFormatChanged();\r
740             }\r
741             else\r
742             {\r
743                 OnBackBufferFormatChanged();\r
744             }\r
745             break;\r
746         }\r
747         case DXUTSETTINGSDLG_D3D11_RESOLUTION:\r
748             OnD3D11ResolutionChanged(); break;\r
749         case DXUTSETTINGSDLG_RESOLUTION:\r
750             OnResolutionChanged(); break;\r
751         case DXUTSETTINGSDLG_REFRESH_RATE:\r
752             OnRefreshRateChanged(); break;\r
753         case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT:\r
754             OnBackBufferFormatChanged(); break;\r
755         case DXUTSETTINGSDLG_DEPTH_STENCIL:\r
756             OnDepthStencilBufferFormatChanged(); break;\r
757         case DXUTSETTINGSDLG_MULTISAMPLE_TYPE:\r
758             OnMultisampleTypeChanged(); break;\r
759         case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY:\r
760             OnMultisampleQualityChanged(); break;\r
761         case DXUTSETTINGSDLG_VERTEX_PROCESSING:\r
762             OnVertexProcessingChanged(); break;\r
763         case DXUTSETTINGSDLG_PRESENT_INTERVAL:\r
764             OnPresentIntervalChanged(); break;\r
765         case DXUTSETTINGSDLG_DEVICECLIP:\r
766             OnDeviceClipChanged(); break;\r
767         case DXUTSETTINGSDLG_API_VERSION:\r
768             OnAPIVersionChanged(); break;\r
769         case DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL:\r
770             OnFeatureLevelChanged(); break;\r
771         case DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT:\r
772             OnAdapterOutputChanged(); break;\r
773         case DXUTSETTINGSDLG_D3D11_REFRESH_RATE:\r
774             OnRefreshRateChanged(); break;\r
775         case DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT:\r
776             OnBackBufferFormatChanged(); break;\r
777         case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT:\r
778             OnMultisampleTypeChanged(); break;\r
779         case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY:\r
780             OnMultisampleQualityChanged(); break;\r
781         case DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL:\r
782             OnPresentIntervalChanged(); break;\r
783         case DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE:\r
784             OnDebugDeviceChanged(); break;\r
785 \r
786         case DXUTSETTINGSDLG_OK:\r
787         {\r
788             bool bFullScreenModeChange = false;\r
789             DXUTDeviceSettings currentSettings = DXUTGetDeviceSettings();\r
790             g_DeviceSettings.MinimumFeatureLevel = currentSettings.MinimumFeatureLevel;\r
791             if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )\r
792             {\r
793                 if( g_DeviceSettings.d3d9.pp.Windowed )\r
794                 {\r
795                     g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0;\r
796 \r
797                     RECT rcClient;\r
798                     if( DXUTIsWindowed() )\r
799                         GetClientRect( DXUTGetHWND(), &rcClient );\r
800                     else\r
801                         rcClient = DXUTGetWindowClientRectAtModeChange();\r
802                     DWORD dwWindowWidth = rcClient.right - rcClient.left;\r
803                     DWORD dwWindowHeight = rcClient.bottom - rcClient.top;\r
804 \r
805                     g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWindowWidth;\r
806                     g_DeviceSettings.d3d9.pp.BackBufferHeight = dwWindowHeight;\r
807                 }\r
808                 else\r
809                 {\r
810                     // Check for fullscreen mode change\r
811                     bFullScreenModeChange = g_DeviceSettings.d3d9.pp.BackBufferWidth !=\r
812                         currentSettings.d3d9.pp.BackBufferWidth ||\r
813                         g_DeviceSettings.d3d9.pp.BackBufferHeight != currentSettings.d3d9.pp.BackBufferHeight ||\r
814                         g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz !=\r
815                         currentSettings.d3d9.pp.FullScreen_RefreshRateInHz;\r
816                 }\r
817 \r
818                 if( g_DeviceSettings.d3d9.pp.MultiSampleType != D3DMULTISAMPLE_NONE )\r
819                 {\r
820                     g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER;\r
821                 }\r
822             }\r
823             else // D3D11\r
824             {\r
825                 if( g_DeviceSettings.d3d11.sd.Windowed )\r
826                 {\r
827                     g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator =\r
828                         g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = 0;\r
829 \r
830                     RECT rcClient;\r
831                     if( DXUTIsWindowed() )\r
832                         GetClientRect( DXUTGetHWND(), &rcClient );\r
833                     else\r
834                         rcClient = DXUTGetWindowClientRectAtModeChange();\r
835                     DWORD dwWindowWidth = rcClient.right - rcClient.left;\r
836                     DWORD dwWindowHeight = rcClient.bottom - rcClient.top;\r
837 \r
838                     g_DeviceSettings.d3d11.sd.BufferDesc.Width = dwWindowWidth;\r
839                     g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwWindowHeight;\r
840                 }\r
841                 else\r
842                 {\r
843                     // Check for fullscreen mode change\r
844                     bFullScreenModeChange = g_DeviceSettings.d3d11.sd.BufferDesc.Width !=\r
845                         currentSettings.d3d11.sd.BufferDesc.Width ||\r
846                         g_DeviceSettings.d3d11.sd.BufferDesc.Height != currentSettings.d3d11.sd.BufferDesc.Height ||\r
847                         g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator !=\r
848                         currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator ||\r
849                         g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator !=\r
850                         currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator;\r
851                 }\r
852             }\r
853 \r
854             if( bFullScreenModeChange )\r
855             {\r
856                 // set appropriate global device settings to that of the current device\r
857                 // settings.  These will get set to the user-defined settings once the\r
858                 // user accepts the mode change\r
859                 DXUTDeviceSettings tSettings = g_DeviceSettings;\r
860                 if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE )\r
861                 {\r
862                     g_DeviceSettings.d3d9.pp.BackBufferWidth = \r
863                         currentSettings.d3d9.pp.BackBufferWidth;\r
864                     g_DeviceSettings.d3d9.pp.BackBufferHeight = \r
865                         currentSettings.d3d9.pp.BackBufferHeight;\r
866                     g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz =\r
867                         currentSettings.d3d9.pp.FullScreen_RefreshRateInHz;\r
868                     g_DeviceSettings.d3d9.pp.Windowed = \r
869                         currentSettings.d3d9.pp.Windowed;\r
870                 }\r
871                 else\r
872                 {\r
873                     \r
874                     g_DeviceSettings.d3d11.sd.BufferDesc.Width = \r
875                         currentSettings.d3d11.sd.BufferDesc.Width;\r
876                     g_DeviceSettings.d3d11.sd.BufferDesc.Height = \r
877                         currentSettings.d3d11.sd.BufferDesc.Height;\r
878                     g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator =\r
879                         currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator;\r
880                     g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator =\r
881                         currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator;\r
882                     g_DeviceSettings.d3d11.sd.Windowed = currentSettings.d3d11.sd.Windowed;\r
883                 \r
884                 }\r
885 \r
886                 // apply the user-defined settings\r
887                 DXUTCreateDeviceFromSettings( &tSettings );\r
888                 // create the mode change timeout dialog\r
889                 m_pActiveDialog = &m_RevertModeDialog;\r
890                 m_nRevertModeTimeout = 15;\r
891                 UpdateModeChangeTimeoutText( m_nRevertModeTimeout );\r
892                 // activate a timer for 1-second updates\r
893                 DXUTSetTimer( StaticOnModeChangeTimer, 1.0f, &m_nIDEvent, ( void* )this );\r
894             }\r
895             else\r
896             {\r
897                 DXUTCreateDeviceFromSettings( &g_DeviceSettings );\r
898                 SetActive( false );\r
899             }\r
900             break;\r
901         }\r
902 \r
903         case DXUTSETTINGSDLG_CANCEL:\r
904         {\r
905             SetActive( false );\r
906             break;\r
907         }\r
908 \r
909         case DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT:\r
910         {\r
911             DXUTKillTimer( m_nIDEvent );\r
912             g_DeviceSettings = DXUTGetDeviceSettings();\r
913             m_pActiveDialog = &m_Dialog;\r
914             SetActive( false );\r
915             break;\r
916         }\r
917 \r
918         case DXUTSETTINGSDLG_MODE_CHANGE_REVERT:\r
919         {\r
920             DXUTKillTimer( m_nIDEvent );\r
921             m_pActiveDialog = &m_Dialog;\r
922             m_nIDEvent = 0;\r
923             m_nRevertModeTimeout = 0;\r
924             DXUTCreateDeviceFromSettings( &g_DeviceSettings );\r
925             Refresh();\r
926             break;\r
927         }\r
928     }\r
929 }\r
930 \r
931 \r
932 //-------------------------------------------------------------------------------------\r
933 HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI()\r
934 {\r
935     CDXUTComboBox* pComboBox;\r
936     CDXUTRadioButton* pRadioButton;\r
937 \r
938     // DXUTSETTINGSDLG_DEVICE_TYPE\r
939     pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
940     g_DeviceSettings.d3d9.DeviceType = ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() );\r
941 \r
942     // DXUTSETTINGSDLG_WINDOWED\r
943     pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );\r
944     g_DeviceSettings.d3d9.pp.Windowed = pRadioButton->GetChecked();\r
945 \r
946     // DXUTSETTINGSDLG_ADAPTER_FORMAT\r
947     pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );\r
948     g_DeviceSettings.d3d9.AdapterFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
949 \r
950     if( g_DeviceSettings.d3d9.pp.Windowed )\r
951     {\r
952         g_DeviceSettings.d3d9.pp.BackBufferFormat = D3DFMT_UNKNOWN;\r
953         g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0;\r
954     }\r
955     else\r
956     {\r
957         // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT\r
958         pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );\r
959         g_DeviceSettings.d3d9.pp.BackBufferFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
960 \r
961         // DXUTSETTINGSDLG_RESOLUTION\r
962         pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );\r
963         DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() );\r
964         g_DeviceSettings.d3d9.pp.BackBufferWidth = HIWORD( dwResolution );\r
965         g_DeviceSettings.d3d9.pp.BackBufferHeight = LOWORD( dwResolution );\r
966 \r
967         // DXUTSETTINGSDLG_REFRESH_RATE\r
968         pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );\r
969         g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() );\r
970     }\r
971 \r
972     // DXUTSETTINGSDLG_DEPTH_STENCIL\r
973     pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );\r
974     g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
975 \r
976     return S_OK;\r
977 }\r
978 \r
979 \r
980 //-------------------------------------------------------------------------------------\r
981 CD3D9EnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo()\r
982 {\r
983     CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
984     return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d9.AdapterOrdinal );\r
985 }\r
986 \r
987 \r
988 //-------------------------------------------------------------------------------------\r
989 CD3D9EnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo()\r
990 {\r
991     CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
992     return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d9.AdapterOrdinal,\r
993                                     g_DeviceSettings.d3d9.DeviceType );\r
994 }\r
995 \r
996 //-------------------------------------------------------------------------------------\r
997 CD3D11EnumAdapterInfo* CD3DSettingsDlg::GetCurrentD3D11AdapterInfo()\r
998 {\r
999     CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1000     return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal );\r
1001 }\r
1002 \r
1003 \r
1004 //-------------------------------------------------------------------------------------\r
1005 CD3D11EnumDeviceInfo* CD3DSettingsDlg::GetCurrentD3D11DeviceInfo()\r
1006 {\r
1007     CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1008     return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d11.AdapterOrdinal,\r
1009                                     g_DeviceSettings.d3d11.DriverType );\r
1010 }\r
1011 \r
1012 \r
1013 //-------------------------------------------------------------------------------------\r
1014 CD3D11EnumOutputInfo* CD3DSettingsDlg::GetCurrentD3D11OutputInfo()\r
1015 {\r
1016     CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1017     return pD3DEnum->GetOutputInfo( g_DeviceSettings.d3d11.AdapterOrdinal,\r
1018                                     g_DeviceSettings.d3d11.Output );\r
1019 }\r
1020 \r
1021 \r
1022 //-------------------------------------------------------------------------------------\r
1023 CD3D9EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo()\r
1024 {\r
1025     CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
1026     return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d9.AdapterOrdinal,\r
1027                                              g_DeviceSettings.d3d9.DeviceType,\r
1028                                              g_DeviceSettings.d3d9.AdapterFormat,\r
1029                                              g_DeviceSettings.d3d9.pp.BackBufferFormat,\r
1030                                              ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) );\r
1031 }\r
1032 \r
1033 //-------------------------------------------------------------------------------------\r
1034 CD3D11EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentD3D11DeviceSettingsCombo()\r
1035 {\r
1036     CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1037     return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d11.AdapterOrdinal,\r
1038                                              g_DeviceSettings.d3d11.DriverType,\r
1039                                              g_DeviceSettings.d3d11.Output,\r
1040                                              g_DeviceSettings.d3d11.sd.BufferDesc.Format,\r
1041                                              ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) );\r
1042 }\r
1043 \r
1044 HRESULT CD3DSettingsDlg::OnD3D11ResolutionChanged () {\r
1045     DWORD dwWidth, dwHeight;\r
1046     GetSelectedD3D11Resolution( &dwWidth, &dwHeight );\r
1047     g_DeviceSettings.d3d11.sd.BufferDesc.Width= dwWidth;\r
1048     g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwHeight;\r
1049     \r
1050     return S_OK;\r
1051 }\r
1052 \r
1053 HRESULT CD3DSettingsDlg::OnFeatureLevelChanged () {\r
1054     HRESULT hr = E_FAIL;\r
1055     if (g_DeviceSettings.ver == DXUT_D3D11_DEVICE) {\r
1056         if (g_DeviceSettings.d3d11.DeviceFeatureLevel == GetSelectedFeatureLevel()) return S_OK;\r
1057         //if( !bRefresh )\r
1058         //{\r
1059             // Obtain a set of valid D3D10 device settings.\r
1060             UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags;\r
1061             ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) );\r
1062             \r
1063             DXUTApplyDefaultDeviceSettings(&g_DeviceSettings);\r
1064             g_DeviceSettings.d3d11.CreateFlags = CreateFlags;\r
1065             g_DeviceSettings.ver = DXUT_D3D11_DEVICE;\r
1066             //g_DeviceSettings.d3d11.fl = GetSelectedFeatureLevel();\r
1067             hr = DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true, GetSelectedFeatureLevel());\r
1068             \r
1069         //}\r
1070 \r
1071         CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1072         CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();\r
1073 \r
1074         CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
1075         pAdapterComboBox->RemoveAllItems();\r
1076 \r
1077         for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter )\r
1078         {\r
1079             CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter );\r
1080             AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );\r
1081         }\r
1082 \r
1083         pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) );\r
1084 \r
1085         CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE );\r
1086         pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) );\r
1087 \r
1088         hr = OnAdapterChanged();\r
1089         if( FAILED( hr ) )\r
1090             return hr;\r
1091     }\r
1092     \r
1093     return hr;\r
1094 }\r
1095 \r
1096 //-------------------------------------------------------------------------------------\r
1097 HRESULT CD3DSettingsDlg::OnAPIVersionChanged( bool bRefresh )\r
1098 {\r
1099     HRESULT hr;\r
1100 \r
1101     // Store the API version\r
1102     g_DeviceSettings.ver = GetSelectedAPIVersion();\r
1103 \r
1104     // Show/hide appropriate dialog controls based on version.\r
1105     ShowControlSet( g_DeviceSettings.ver );\r
1106 \r
1107     switch( g_DeviceSettings.ver )\r
1108     {\r
1109         case DXUT_D3D9_DEVICE:\r
1110         {\r
1111             if( !bRefresh )\r
1112             {\r
1113                 // Obtain a set of valid D3D9 device settings.\r
1114                 UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags;\r
1115                 ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) );\r
1116                 // We want a specific API version, so set up match option to preserve it.\r
1117                 DXUTApplyDefaultDeviceSettings(&g_DeviceSettings);\r
1118                 g_DeviceSettings.d3d11.CreateFlags = CreateFlags;\r
1119                 g_DeviceSettings.ver = DXUT_D3D9_DEVICE;\r
1120                 DXUTSnapDeviceSettingsToEnumDevice ( &g_DeviceSettings, true);\r
1121             }\r
1122 \r
1123             CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration();\r
1124             CGrowableArray <CD3D9EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();\r
1125 \r
1126             CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
1127             pAdapterComboBox->RemoveAllItems();\r
1128 \r
1129             for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter )\r
1130             {\r
1131                 CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter );\r
1132                 AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );\r
1133             }\r
1134 \r
1135             pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) );\r
1136 \r
1137             hr = OnAdapterChanged();\r
1138             if( FAILED( hr ) )\r
1139                 return hr;\r
1140 \r
1141             break;\r
1142         }\r
1143 \r
1144         case DXUT_D3D11_DEVICE:\r
1145         {\r
1146             if( !bRefresh )\r
1147             {\r
1148                 // Obtain a set of valid D3D10 device settings.\r
1149                 UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags;\r
1150                 ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) );\r
1151                 // We want a specific API version, so set up match option to preserve it.\r
1152                 DXUTApplyDefaultDeviceSettings(&g_DeviceSettings);\r
1153                 g_DeviceSettings.d3d11.CreateFlags = CreateFlags;\r
1154                 g_DeviceSettings.ver = DXUT_D3D11_DEVICE;\r
1155                 DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true);\r
1156                 \r
1157             }\r
1158 \r
1159             CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1160             CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList();\r
1161 \r
1162             CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
1163             pAdapterComboBox->RemoveAllItems();\r
1164 \r
1165             for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter )\r
1166             {\r
1167                 CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter );\r
1168                 AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal );\r
1169             }\r
1170 \r
1171             pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) );\r
1172 \r
1173             CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE );\r
1174             pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) );\r
1175 \r
1176             hr = OnAdapterChanged();\r
1177             if( FAILED( hr ) )\r
1178                 return hr;\r
1179 \r
1180             break;\r
1181         }\r
1182     }\r
1183 \r
1184     return S_OK;\r
1185 }\r
1186 \r
1187 \r
1188 //-------------------------------------------------------------------------------------\r
1189 HRESULT CD3DSettingsDlg::OnAdapterChanged()\r
1190 {\r
1191     HRESULT hr = S_OK;\r
1192 \r
1193     switch( g_DeviceSettings.ver )\r
1194     {\r
1195         case DXUT_D3D9_DEVICE:\r
1196         {\r
1197             // Store the adapter index\r
1198             g_DeviceSettings.d3d9.AdapterOrdinal = GetSelectedAdapter();\r
1199 \r
1200             // DXUTSETTINGSDLG_DEVICE_TYPE\r
1201             CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
1202             pDeviceTypeComboBox->RemoveAllItems();\r
1203 \r
1204             CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();\r
1205             if( pAdapterInfo == NULL )\r
1206                 return E_FAIL;\r
1207 \r
1208             for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )\r
1209             {\r
1210                 CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo );\r
1211                 AddDeviceType( pDeviceInfo->DeviceType );\r
1212             }\r
1213 \r
1214             pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.DeviceType ) );\r
1215 \r
1216             hr = OnDeviceTypeChanged();\r
1217             if( FAILED( hr ) )\r
1218                 return hr;\r
1219 \r
1220             break;\r
1221         }\r
1222 \r
1223         case DXUT_D3D11_DEVICE:\r
1224         {\r
1225             // Store the adapter index\r
1226             g_DeviceSettings.d3d11.AdapterOrdinal = GetSelectedAdapter();\r
1227 \r
1228             // DXUTSETTINGSDLG_DEVICE_TYPE\r
1229             CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
1230             pDeviceTypeComboBox->RemoveAllItems();\r
1231 \r
1232             CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo();\r
1233             if( pAdapterInfo == NULL )\r
1234                 return E_FAIL;\r
1235 \r
1236             for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ )\r
1237             {\r
1238                 CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo );\r
1239                 AddD3D11DeviceType( pDeviceInfo->DeviceType );\r
1240             }\r
1241 \r
1242             pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DriverType ) );\r
1243 \r
1244             hr = OnDeviceTypeChanged();\r
1245             if( FAILED( hr ) )\r
1246                 return hr;\r
1247 \r
1248             break;\r
1249         }\r
1250     }\r
1251 \r
1252     return S_OK;\r
1253 }\r
1254 \r
1255 \r
1256 \r
1257 //-------------------------------------------------------------------------------------\r
1258 HRESULT CD3DSettingsDlg::OnDeviceTypeChanged()\r
1259 {\r
1260     HRESULT hr = S_OK;\r
1261 \r
1262     switch( g_DeviceSettings.ver )\r
1263     {\r
1264         case DXUT_D3D9_DEVICE:\r
1265         {\r
1266             g_DeviceSettings.d3d9.DeviceType = GetSelectedDeviceType();\r
1267 \r
1268             // Update windowed/full screen radio buttons\r
1269             bool bHasWindowedDeviceCombo = false;\r
1270             bool bHasFullScreenDeviceCombo = false;\r
1271 \r
1272             CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();\r
1273             if( pDeviceInfo == NULL )\r
1274                 return E_FAIL;\r
1275 \r
1276             for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )\r
1277             {\r
1278                 CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );\r
1279 \r
1280                 if( pDeviceSettingsCombo->Windowed )\r
1281                     bHasWindowedDeviceCombo = true;\r
1282                 else\r
1283                     bHasFullScreenDeviceCombo = true;\r
1284             }\r
1285 \r
1286             // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN\r
1287             m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo );\r
1288             m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo );\r
1289 \r
1290             SetWindowed( g_DeviceSettings.d3d9.pp.Windowed && bHasWindowedDeviceCombo );\r
1291 \r
1292             hr = OnWindowedFullScreenChanged();\r
1293             if( FAILED( hr ) )\r
1294                 return hr;\r
1295 \r
1296             break;\r
1297         }\r
1298         case DXUT_D3D11_DEVICE:\r
1299         {\r
1300             g_DeviceSettings.d3d11.DriverType = GetSelectedD3D11DeviceType();\r
1301 \r
1302             // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN\r
1303             m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, true );\r
1304             m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, true );\r
1305 \r
1306             SetWindowed( g_DeviceSettings.d3d11.sd.Windowed != 0 );\r
1307 \r
1308             hr = OnWindowedFullScreenChanged();\r
1309             if( FAILED( hr ) )\r
1310                 return hr;\r
1311 \r
1312             break;\r
1313         }\r
1314     }\r
1315 \r
1316     return S_OK;\r
1317 }\r
1318 \r
1319 \r
1320 \r
1321 //-------------------------------------------------------------------------------------\r
1322 HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged()\r
1323 {\r
1324     HRESULT hr = S_OK;\r
1325     bool bWindowed = IsWindowed();\r
1326 \r
1327     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed );\r
1328     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed );\r
1329     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed );\r
1330     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, !bWindowed );\r
1331     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, !bWindowed );\r
1332     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, !bWindowed );\r
1333 \r
1334     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed );\r
1335     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed );\r
1336     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, !bWindowed );\r
1337     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed );\r
1338     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed );\r
1339     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, !bWindowed );\r
1340     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION, !bWindowed );\r
1341     m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, !bWindowed );\r
1342 \r
1343     switch( g_DeviceSettings.ver )\r
1344     {\r
1345         case DXUT_D3D9_DEVICE:\r
1346         {\r
1347             g_DeviceSettings.d3d9.pp.Windowed = bWindowed;\r
1348             bool bDeviceClip = ( 0x0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) );\r
1349 \r
1350             // If windowed, get the appropriate adapter format from Direct3D\r
1351             if( g_DeviceSettings.d3d9.pp.Windowed )\r
1352             {\r
1353                 IDirect3D9* pD3D = DXUTGetD3D9Object();\r
1354                 if( pD3D == NULL )\r
1355                     return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL );\r
1356 \r
1357                 D3DDISPLAYMODE mode;\r
1358                 hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.d3d9.AdapterOrdinal, &mode );\r
1359                 if( FAILED( hr ) )\r
1360                     return DXTRACE_ERR( L"GetAdapterDisplayMode", hr );\r
1361 \r
1362                 // Default resolution to the fullscreen res that was last used\r
1363                 RECT rc = DXUTGetFullsceenClientRectAtModeChange();\r
1364                 if( rc.right == 0 || rc.bottom == 0 )\r
1365                 {\r
1366                     // If nothing last used, then default to the adapter desktop res\r
1367                     g_DeviceSettings.d3d9.pp.BackBufferWidth = mode.Width;\r
1368                     g_DeviceSettings.d3d9.pp.BackBufferHeight = mode.Height;\r
1369                 }\r
1370                 else\r
1371                 {\r
1372                     g_DeviceSettings.d3d9.pp.BackBufferWidth = rc.right;\r
1373                     g_DeviceSettings.d3d9.pp.BackBufferHeight = rc.bottom;\r
1374                 }\r
1375 \r
1376                 g_DeviceSettings.d3d9.AdapterFormat = mode.Format;\r
1377                 g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = mode.RefreshRate;\r
1378             }\r
1379 \r
1380             const D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat;\r
1381             const DWORD dwWidth = g_DeviceSettings.d3d9.pp.BackBufferWidth;\r
1382             const DWORD dwHeight = g_DeviceSettings.d3d9.pp.BackBufferHeight;\r
1383             const DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz;\r
1384 \r
1385             // DXUTSETTINGSDLG_DEVICECLIP\r
1386             SetDeviceClip( bDeviceClip );\r
1387 \r
1388             // DXUTSETTINGSDLG_ADAPTER_FORMAT\r
1389             CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );\r
1390             if( pAdapterFormatComboBox == NULL )\r
1391                 return E_FAIL;\r
1392             pAdapterFormatComboBox->RemoveAllItems();\r
1393 \r
1394             CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();\r
1395             if( pDeviceInfo == NULL )\r
1396                 return E_FAIL;\r
1397 \r
1398             if( bWindowed )\r
1399             {\r
1400                 AddAdapterFormat( adapterFormat );\r
1401             }\r
1402             else\r
1403             {\r
1404                 for( int iSettingsCombo = 0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize();\r
1405                      iSettingsCombo++ )\r
1406                 {\r
1407                     CD3D9EnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt(\r
1408                         iSettingsCombo );\r
1409                     AddAdapterFormat( pSettingsCombo->AdapterFormat );\r
1410                 }\r
1411             }\r
1412 \r
1413             pAdapterFormatComboBox->SetSelectedByData( ULongToPtr( adapterFormat ) );\r
1414 \r
1415             hr = OnAdapterFormatChanged();\r
1416             if( FAILED( hr ) )\r
1417                 return hr;\r
1418 \r
1419             // DXUTSETTINGSDLG_RESOLUTION\r
1420             CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );\r
1421 \r
1422             if( bWindowed )\r
1423             {\r
1424                 pResolutionComboBox->RemoveAllItems();\r
1425                 AddResolution( dwWidth, dwHeight );\r
1426             }\r
1427 \r
1428             pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) );\r
1429 \r
1430             hr = OnResolutionChanged();\r
1431             if( FAILED( hr ) )\r
1432                 return hr;\r
1433 \r
1434             // DXUTSETTINGSDLG_REFRESH_RATE\r
1435             CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );\r
1436 \r
1437             if( bWindowed )\r
1438             {\r
1439                 pRefreshRateComboBox->RemoveAllItems();\r
1440                 AddRefreshRate( dwRefreshRate );\r
1441             }\r
1442 \r
1443             pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) );\r
1444 \r
1445             hr = OnRefreshRateChanged();\r
1446             if( FAILED( hr ) )\r
1447                 return hr;\r
1448 \r
1449             break;\r
1450         }\r
1451 \r
1452         case DXUT_D3D11_DEVICE:\r
1453         {\r
1454             g_DeviceSettings.d3d11.sd.Windowed = bWindowed;\r
1455 \r
1456             // Get available adapter output\r
1457             CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration();\r
1458 \r
1459             CDXUTComboBox* pOutputComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT );\r
1460             pOutputComboBox->RemoveAllItems();\r
1461 \r
1462             CD3D11EnumAdapterInfo* pAdapterInfo = pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal );\r
1463             for( int ioutput = 0; ioutput < pAdapterInfo->outputInfoList.GetSize(); ++ioutput )\r
1464             {\r
1465                 CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( ioutput );\r
1466                 AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, pOutputInfo->Output );\r
1467             }\r
1468 \r
1469             pOutputComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.Output ) );\r
1470 \r
1471             hr = OnAdapterOutputChanged();\r
1472             if( FAILED( hr ) )\r
1473                 return hr;\r
1474 \r
1475             break;\r
1476         }\r
1477     }\r
1478 \r
1479     return S_OK;\r
1480 }\r
1481 \r
1482 \r
1483 //-------------------------------------------------------------------------------------\r
1484 HRESULT CD3DSettingsDlg::OnAdapterOutputChanged()\r
1485 {\r
1486     HRESULT hr;\r
1487 \r
1488     switch( g_DeviceSettings.ver )\r
1489     {\r
1490         case DXUT_D3D11_DEVICE:\r
1491         {\r
1492             bool bWindowed = IsWindowed();\r
1493             g_DeviceSettings.d3d11.sd.Windowed = bWindowed;\r
1494 \r
1495             // If windowed, get the appropriate adapter format from Direct3D\r
1496             if( g_DeviceSettings.d3d11.sd.Windowed )\r
1497             {\r
1498                 DXGI_MODE_DESC mode;\r
1499                 hr = DXUTGetD3D11AdapterDisplayMode( g_DeviceSettings.d3d11.AdapterOrdinal,\r
1500                                                      g_DeviceSettings.d3d11.Output, &mode );\r
1501                 if( FAILED( hr ) )\r
1502                     return DXTRACE_ERR( L"GetD3D11AdapterDisplayMode", hr );\r
1503 \r
1504                 // Default resolution to the fullscreen res that was last used\r
1505                 RECT rc = DXUTGetFullsceenClientRectAtModeChange();\r
1506                 if( rc.right == 0 || rc.bottom == 0 )\r
1507                 {\r
1508                     // If nothing last used, then default to the adapter desktop res\r
1509                     g_DeviceSettings.d3d11.sd.BufferDesc.Width = mode.Width;\r
1510                     g_DeviceSettings.d3d11.sd.BufferDesc.Height = mode.Height;\r
1511                 }\r
1512                 else\r
1513                 {\r
1514                     g_DeviceSettings.d3d11.sd.BufferDesc.Width = rc.right;\r
1515                     g_DeviceSettings.d3d11.sd.BufferDesc.Height = rc.bottom;\r
1516                 }\r
1517 \r
1518                 g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = mode.RefreshRate;\r
1519             }\r
1520 \r
1521             const DXGI_RATIONAL RefreshRate = g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate;\r
1522 \r
1523             CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo();\r
1524             if( pAdapterInfo == NULL )\r
1525                 return E_FAIL;\r
1526 \r
1527             // DXUTSETTINGSDLG_D3D11_RESOLUTION\r
1528             hr = UpdateD3D11Resolutions();\r
1529             if( FAILED( hr ) )\r
1530                 return hr;\r
1531 \r
1532             // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT\r
1533             CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT\r
1534                                                                               );\r
1535             pBackBufferFormatComboBox->RemoveAllItems();\r
1536 \r
1537             for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ )\r
1538             {\r
1539                 CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc );\r
1540                 if( ( pDeviceCombo->Windowed == TRUE ) == bWindowed )\r
1541                 {\r
1542                     AddD3D11BackBufferFormat( pDeviceCombo->BackBufferFormat );\r
1543                 }\r
1544             }\r
1545 \r
1546             pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.BufferDesc.Format ) );\r
1547 \r
1548             hr = OnBackBufferFormatChanged();\r
1549             if( FAILED( hr ) )\r
1550                 return hr;\r
1551 \r
1552             // DXUTSETTINGSDLG_D3D11_REFRESH_RATE\r
1553             if( bWindowed )\r
1554             {\r
1555                 CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE );\r
1556                 for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i )\r
1557                 {\r
1558                     DXGI_RATIONAL* pRefreshRate = reinterpret_cast<DXGI_RATIONAL*>(\r
1559                         pRefreshRateComboBox->GetItemData( i ) );\r
1560                     delete pRefreshRate;\r
1561                 }\r
1562                 pRefreshRateComboBox->RemoveAllItems();\r
1563                 AddD3D11RefreshRate( RefreshRate );\r
1564             }\r
1565 \r
1566             SetSelectedD3D11RefreshRate( RefreshRate );\r
1567             break;\r
1568         }\r
1569     };\r
1570 \r
1571     hr = OnRefreshRateChanged();\r
1572     if( FAILED( hr ) )\r
1573         return hr;\r
1574 \r
1575     return S_OK;\r
1576 }\r
1577 \r
1578 \r
1579 //-------------------------------------------------------------------------------------\r
1580 HRESULT CD3DSettingsDlg::OnAdapterFormatChanged()\r
1581 {\r
1582     HRESULT hr = S_OK;\r
1583 \r
1584     switch( g_DeviceSettings.ver )\r
1585     {\r
1586         case DXUT_D3D9_DEVICE:\r
1587         {\r
1588             // DXUTSETTINGSDLG_ADAPTER_FORMAT\r
1589             D3DFORMAT adapterFormat = GetSelectedAdapterFormat();\r
1590             g_DeviceSettings.d3d9.AdapterFormat = adapterFormat;\r
1591 \r
1592             // DXUTSETTINGSDLG_RESOLUTION\r
1593             CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );\r
1594             pResolutionComboBox->RemoveAllItems();\r
1595 \r
1596             CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();\r
1597             if( pAdapterInfo == NULL )\r
1598                 return E_FAIL;\r
1599 \r
1600             bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked();\r
1601 \r
1602             // Get the desktop aspect ratio\r
1603             D3DDISPLAYMODE dmDesktop;\r
1604             DXUTGetDesktopResolution( g_DeviceSettings.d3d9.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height );\r
1605             float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height;\r
1606 \r
1607             for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ )\r
1608             {\r
1609                 D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm );\r
1610                 float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height;\r
1611 \r
1612                 if( DisplayMode.Format == g_DeviceSettings.d3d9.AdapterFormat )\r
1613                 {\r
1614                     // If "Show All" is not checked, then hide all resolutions\r
1615                     // that don't match the aspect ratio of the desktop resolution\r
1616                     if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) )\r
1617                     {\r
1618                         AddResolution( DisplayMode.Width, DisplayMode.Height );\r
1619                     }\r
1620                 }\r
1621             }\r
1622 \r
1623             const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d9.pp.BackBufferWidth,\r
1624                                                     g_DeviceSettings.d3d9.pp.BackBufferHeight );\r
1625 \r
1626             pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) );\r
1627 \r
1628             hr = OnResolutionChanged();\r
1629             if( FAILED( hr ) )\r
1630                 return hr;\r
1631 \r
1632             // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT\r
1633             CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );\r
1634             pBackBufferFormatComboBox->RemoveAllItems();\r
1635 \r
1636             CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();\r
1637             if( pDeviceInfo == NULL )\r
1638                 return E_FAIL;\r
1639 \r
1640             const BOOL bWindowed = IsWindowed();\r
1641             bool bHasWindowedBackBuffer = false;\r
1642 \r
1643             for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )\r
1644             {\r
1645                 CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );\r
1646                 if( pDeviceCombo->Windowed == bWindowed &&\r
1647                     pDeviceCombo->AdapterFormat == g_DeviceSettings.d3d9.AdapterFormat )\r
1648                 {\r
1649                     AddBackBufferFormat( pDeviceCombo->BackBufferFormat );\r
1650                     bHasWindowedBackBuffer = true;\r
1651                 }\r
1652             }\r
1653 \r
1654             pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.BackBufferFormat ) );\r
1655 \r
1656             hr = OnBackBufferFormatChanged();\r
1657             if( FAILED( hr ) )\r
1658                 return hr;\r
1659 \r
1660             if( !bHasWindowedBackBuffer )\r
1661             {\r
1662                 m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false );\r
1663 \r
1664                 if( g_DeviceSettings.d3d9.pp.Windowed )\r
1665                 {\r
1666                     SetWindowed( false );\r
1667 \r
1668                     hr = OnWindowedFullScreenChanged();\r
1669                     if( FAILED( hr ) )\r
1670                         return hr;\r
1671                 }\r
1672             }\r
1673 \r
1674             break;\r
1675         }\r
1676     }\r
1677 \r
1678     return S_OK;\r
1679 }\r
1680 \r
1681 \r
1682 //-------------------------------------------------------------------------------------\r
1683 HRESULT CD3DSettingsDlg::OnResolutionChanged()\r
1684 {\r
1685     HRESULT hr = S_OK;\r
1686 \r
1687     CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();\r
1688     if( pAdapterInfo == NULL )\r
1689         return E_FAIL;\r
1690 \r
1691     // Set resolution\r
1692     DWORD dwWidth, dwHeight;\r
1693     GetSelectedResolution( &dwWidth, &dwHeight );\r
1694     g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWidth;\r
1695     g_DeviceSettings.d3d9.pp.BackBufferHeight = dwHeight;\r
1696 \r
1697     DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz;\r
1698 \r
1699     // Update the refresh rate list\r
1700     CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );\r
1701     pRefreshRateComboBox->RemoveAllItems();\r
1702 \r
1703     D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat;\r
1704     for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ )\r
1705     {\r
1706         D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm );\r
1707 \r
1708         if( displayMode.Format == adapterFormat &&\r
1709             displayMode.Width == dwWidth &&\r
1710             displayMode.Height == dwHeight )\r
1711         {\r
1712             AddRefreshRate( displayMode.RefreshRate );\r
1713         }\r
1714     }\r
1715 \r
1716     pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) );\r
1717 \r
1718     hr = OnRefreshRateChanged();\r
1719     if( FAILED( hr ) )\r
1720         return hr;\r
1721 \r
1722     return S_OK;\r
1723 }\r
1724 \r
1725 \r
1726 \r
1727 //-------------------------------------------------------------------------------------\r
1728 HRESULT CD3DSettingsDlg::OnRefreshRateChanged()\r
1729 {\r
1730     // Set refresh rate\r
1731     switch( g_DeviceSettings.ver )\r
1732     {\r
1733         case DXUT_D3D9_DEVICE:\r
1734             g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate();\r
1735             break;\r
1736 \r
1737         case DXUT_D3D11_DEVICE:\r
1738             g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = GetSelectedD3D11RefreshRate();\r
1739             break;\r
1740     }\r
1741 \r
1742     return S_OK;\r
1743 }\r
1744 \r
1745 \r
1746 //-------------------------------------------------------------------------------------\r
1747 HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged()\r
1748 {\r
1749     HRESULT hr = S_OK;\r
1750 \r
1751     switch( g_DeviceSettings.ver )\r
1752     {\r
1753         case DXUT_D3D9_DEVICE:\r
1754         {\r
1755             g_DeviceSettings.d3d9.pp.BackBufferFormat = GetSelectedBackBufferFormat();\r
1756 \r
1757             D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat;\r
1758             D3DFORMAT backBufferFormat = g_DeviceSettings.d3d9.pp.BackBufferFormat;\r
1759 \r
1760             CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();\r
1761             if( pDeviceInfo == NULL )\r
1762                 return E_FAIL;\r
1763 \r
1764             bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP;\r
1765             DXUTGetD3D9Enumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP,\r
1766                                                                        &bAllowPureHardwareVP, &bAllowMixedVP );\r
1767 \r
1768             for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )\r
1769             {\r
1770                 CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );\r
1771 \r
1772                 if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) &&\r
1773                     pDeviceCombo->AdapterFormat == adapterFormat &&\r
1774                     pDeviceCombo->BackBufferFormat == backBufferFormat )\r
1775                 {\r
1776                     CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );\r
1777                     pDepthStencilComboBox->RemoveAllItems();\r
1778                     pDepthStencilComboBox->SetEnabled( ( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil == TRUE ) );\r
1779 \r
1780                     if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil )\r
1781                     {\r
1782                         for( int ifmt = 0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ )\r
1783                         {\r
1784                             D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt );\r
1785 \r
1786                             AddDepthStencilBufferFormat( fmt );\r
1787                         }\r
1788 \r
1789                         pDepthStencilComboBox->SetSelectedByData( ULongToPtr(\r
1790                                                                   g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ) );\r
1791                     }\r
1792                     else\r
1793                     {\r
1794                         if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) )\r
1795                             pDepthStencilComboBox->AddItem( L"(not used)", NULL );\r
1796                     }\r
1797 \r
1798                     hr = OnDepthStencilBufferFormatChanged();\r
1799                     if( FAILED( hr ) )\r
1800                         return hr;\r
1801 \r
1802                     CDXUTComboBox* pVertexProcessingComboBox =\r
1803                         m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );\r
1804                     pVertexProcessingComboBox->RemoveAllItems();\r
1805 \r
1806                     // Add valid vertex processing types\r
1807                     if( bAllowSoftwareVP )\r
1808                         AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING );\r
1809 \r
1810                     if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\r
1811                         AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING );\r
1812 \r
1813                     if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE )\r
1814                         AddVertexProcessingType( D3DCREATE_PUREDEVICE );\r
1815 \r
1816                     if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )\r
1817                         AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING );\r
1818 \r
1819                     if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE )\r
1820                         pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_PUREDEVICE ) );\r
1821                     else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )\r
1822                         pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(\r
1823                                                                       D3DCREATE_SOFTWARE_VERTEXPROCESSING ) );\r
1824                     else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )\r
1825                         pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(\r
1826                                                                       D3DCREATE_HARDWARE_VERTEXPROCESSING ) );\r
1827                     else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING )\r
1828                         pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_MIXED_VERTEXPROCESSING ) );\r
1829 \r
1830                     hr = OnVertexProcessingChanged();\r
1831                     if( FAILED( hr ) )\r
1832                         return hr;\r
1833 \r
1834                     CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL );\r
1835                     pPresentIntervalComboBox->RemoveAllItems();\r
1836                     pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( D3DPRESENT_INTERVAL_DEFAULT ) );\r
1837                     pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( D3DPRESENT_INTERVAL_IMMEDIATE ) );\r
1838 \r
1839                     pPresentIntervalComboBox->SetSelectedByData( ULongToPtr(\r
1840                                                                  g_DeviceSettings.d3d9.pp.PresentationInterval ) );\r
1841 \r
1842                     hr = OnPresentIntervalChanged();\r
1843                     if( FAILED( hr ) )\r
1844                         return hr;\r
1845                 }\r
1846             }\r
1847 \r
1848             break;\r
1849         }\r
1850 \r
1851         case DXUT_D3D11_DEVICE:\r
1852         {\r
1853             g_DeviceSettings.d3d11.sd.BufferDesc.Format = GetSelectedD3D11BackBufferFormat();\r
1854 \r
1855             DXGI_FORMAT backBufferFormat = g_DeviceSettings.d3d11.sd.BufferDesc.Format;\r
1856 \r
1857             CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo();\r
1858             if( pAdapterInfo == NULL )\r
1859                 return E_FAIL;\r
1860 \r
1861             for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ )\r
1862             {\r
1863                 CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc );\r
1864 \r
1865                 if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) &&\r
1866                     pDeviceCombo->BackBufferFormat == backBufferFormat &&\r
1867                     pDeviceCombo->DeviceType == g_DeviceSettings.d3d11.DriverType )\r
1868                 {\r
1869                     CDXUTComboBox* pMultisampleCountCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT\r
1870                                                                                    );\r
1871                     pMultisampleCountCombo->RemoveAllItems();\r
1872                     for( int i = 0; i < pDeviceCombo->multiSampleCountList.GetSize(); ++i )\r
1873                         AddD3D11MultisampleCount( pDeviceCombo->multiSampleCountList.GetAt( i ) );\r
1874                     pMultisampleCountCombo->SetSelectedByData( ULongToPtr(\r
1875                                                                g_DeviceSettings.d3d11.sd.SampleDesc.Count ) );\r
1876 \r
1877                     hr = OnMultisampleTypeChanged();\r
1878                     if( FAILED( hr ) )\r
1879                         return hr;\r
1880 \r
1881                     CDXUTComboBox* pPresentIntervalComboBox =\r
1882                         m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL );\r
1883                     pPresentIntervalComboBox->RemoveAllItems();\r
1884                     pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( 1 ) );\r
1885                     pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( 0 ) );\r
1886 \r
1887                     pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.SyncInterval ) );\r
1888 \r
1889                     hr = OnPresentIntervalChanged();\r
1890                     if( FAILED( hr ) )\r
1891                         return hr;\r
1892 \r
1893                     hr = UpdateD3D11Resolutions();\r
1894                     if( FAILED( hr ) )\r
1895                         return hr;\r
1896                 }\r
1897             }\r
1898 \r
1899             break;\r
1900         }\r
1901     }\r
1902 \r
1903     return S_OK;\r
1904 }\r
1905 \r
1906 \r
1907 //-------------------------------------------------------------------------------------\r
1908 HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged()\r
1909 {\r
1910     HRESULT hr = S_OK;\r
1911 \r
1912     D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat();\r
1913 \r
1914     if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil )\r
1915         g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = depthStencilBufferFormat;\r
1916 \r
1917     CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo();\r
1918     if( pDeviceSettingsCombo == NULL )\r
1919         return E_FAIL;\r
1920 \r
1921     CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );\r
1922     pMultisampleTypeCombo->RemoveAllItems();\r
1923 \r
1924     for( int ims = 0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ )\r
1925     {\r
1926         D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims );\r
1927 \r
1928         bool bConflictFound = false;\r
1929         for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ )\r
1930         {\r
1931             CD3D9EnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf );\r
1932             if( DSMSConf.DSFormat == depthStencilBufferFormat &&\r
1933                 DSMSConf.MSType == msType )\r
1934             {\r
1935                 bConflictFound = true;\r
1936                 break;\r
1937             }\r
1938         }\r
1939 \r
1940         if( !bConflictFound )\r
1941             AddMultisampleType( msType );\r
1942     }\r
1943 \r
1944     CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );\r
1945     pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleType ) );\r
1946 \r
1947     hr = OnMultisampleTypeChanged();\r
1948     if( FAILED( hr ) )\r
1949         return hr;\r
1950 \r
1951     return S_OK;\r
1952 }\r
1953 \r
1954 \r
1955 //-------------------------------------------------------------------------------------\r
1956 HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged()\r
1957 {\r
1958     HRESULT hr = S_OK;\r
1959 \r
1960     switch( g_DeviceSettings.ver )\r
1961     {\r
1962         case DXUT_D3D9_DEVICE:\r
1963         {\r
1964             D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType();\r
1965             g_DeviceSettings.d3d9.pp.MultiSampleType = multisampleType;\r
1966 \r
1967             CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo();\r
1968             if( pDeviceSettingsCombo == NULL )\r
1969                 return E_FAIL;\r
1970 \r
1971             DWORD dwMaxQuality = 0;\r
1972             for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ )\r
1973             {\r
1974                 D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType );\r
1975                 if( msType == multisampleType )\r
1976                 {\r
1977                     dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType );\r
1978                     break;\r
1979                 }\r
1980             }\r
1981 \r
1982             // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY\r
1983             CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );\r
1984             pMultisampleQualityCombo->RemoveAllItems();\r
1985 \r
1986             for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ )\r
1987             {\r
1988                 AddMultisampleQuality( iQuality );\r
1989             }\r
1990 \r
1991             pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleQuality ) );\r
1992 \r
1993             hr = OnMultisampleQualityChanged();\r
1994             if( FAILED( hr ) )\r
1995                 return hr;\r
1996 \r
1997             break;\r
1998         }\r
1999         case DXUT_D3D11_DEVICE:\r
2000         {\r
2001             UINT multisampleCount = GetSelectedD3D11MultisampleCount();\r
2002             g_DeviceSettings.d3d11.sd.SampleDesc.Count = multisampleCount;\r
2003 \r
2004             CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentD3D11DeviceSettingsCombo();\r
2005             if( pDeviceSettingsCombo == NULL )\r
2006                 return E_FAIL;\r
2007 \r
2008             UINT MaxQuality = 0;\r
2009             for( int iCount = 0; iCount < pDeviceSettingsCombo->multiSampleCountList.GetSize(); iCount++ )\r
2010             {\r
2011                 UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( iCount );\r
2012                 if( Count == multisampleCount )\r
2013                 {\r
2014                     MaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iCount );\r
2015                     break;\r
2016                 }\r
2017             }\r
2018 \r
2019             // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY\r
2020             CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY\r
2021                                                                              );\r
2022             pMultisampleQualityCombo->RemoveAllItems();\r
2023 \r
2024             for( UINT iQuality = 0; iQuality < MaxQuality; iQuality++ )\r
2025             {\r
2026                 AddD3D11MultisampleQuality( iQuality );\r
2027             }\r
2028 \r
2029             pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ) );\r
2030 \r
2031             hr = OnMultisampleQualityChanged();\r
2032             if( FAILED( hr ) )\r
2033                 return hr;\r
2034 \r
2035             break;\r
2036         }\r
2037     }\r
2038 \r
2039     return S_OK;\r
2040 }\r
2041 \r
2042 \r
2043 //-------------------------------------------------------------------------------------\r
2044 HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged()\r
2045 {\r
2046     switch( g_DeviceSettings.ver )\r
2047     {\r
2048         case DXUT_D3D9_DEVICE:\r
2049             g_DeviceSettings.d3d9.pp.MultiSampleQuality = GetSelectedMultisampleQuality();\r
2050             break;\r
2051 \r
2052         case DXUT_D3D11_DEVICE:\r
2053             g_DeviceSettings.d3d11.sd.SampleDesc.Quality = GetSelectedD3D11MultisampleQuality();\r
2054             break;\r
2055     }\r
2056 \r
2057     return S_OK;\r
2058 }\r
2059 \r
2060 \r
2061 //-------------------------------------------------------------------------------------\r
2062 HRESULT CD3DSettingsDlg::OnVertexProcessingChanged()\r
2063 {\r
2064     DWORD dwBehavior = g_DeviceSettings.d3d9.BehaviorFlags;\r
2065 \r
2066     // Clear vertex processing flags\r
2067     dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING;\r
2068     dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING;\r
2069     dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING;\r
2070     dwBehavior &= ~D3DCREATE_PUREDEVICE;\r
2071 \r
2072     // Determine new flags\r
2073     DWORD dwNewFlags = GetSelectedVertexProcessingType();\r
2074     if( dwNewFlags & D3DCREATE_PUREDEVICE )\r
2075         dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING;\r
2076 \r
2077     // Make changes\r
2078     g_DeviceSettings.d3d9.BehaviorFlags = dwBehavior | dwNewFlags;\r
2079 \r
2080     return S_OK;\r
2081 }\r
2082 \r
2083 \r
2084 //-------------------------------------------------------------------------------------\r
2085 HRESULT CD3DSettingsDlg::OnPresentIntervalChanged()\r
2086 {\r
2087     switch( g_DeviceSettings.ver )\r
2088     {\r
2089         case DXUT_D3D9_DEVICE:\r
2090             g_DeviceSettings.d3d9.pp.PresentationInterval = GetSelectedPresentInterval();\r
2091             break;\r
2092 \r
2093         case DXUT_D3D11_DEVICE:\r
2094             g_DeviceSettings.d3d11.SyncInterval = GetSelectedD3D11PresentInterval();\r
2095             break;\r
2096     }\r
2097 \r
2098     return S_OK;\r
2099 }\r
2100 \r
2101 \r
2102 //-------------------------------------------------------------------------------------\r
2103 HRESULT CD3DSettingsDlg::OnDebugDeviceChanged()\r
2104 {\r
2105     bool bDebugDevice = GetSelectedDebugDeviceValue();\r
2106 \r
2107     if( bDebugDevice )\r
2108         g_DeviceSettings.d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG;\r
2109     else\r
2110         g_DeviceSettings.d3d11.CreateFlags &= ~D3D11_CREATE_DEVICE_DEBUG;\r
2111 \r
2112     return S_OK;\r
2113 }\r
2114 \r
2115 //-------------------------------------------------------------------------------------\r
2116 HRESULT CD3DSettingsDlg::OnDeviceClipChanged()\r
2117 {\r
2118     if( IsDeviceClip() )\r
2119         g_DeviceSettings.d3d9.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP;\r
2120     else\r
2121         g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP;\r
2122 \r
2123     return S_OK;\r
2124 }\r
2125 \r
2126 \r
2127 //-------------------------------------------------------------------------------------\r
2128 void CD3DSettingsDlg::AddAPIVersion( DXUTDeviceVersion version )\r
2129 {\r
2130     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION );\r
2131 \r
2132     if( !pComboBox->ContainsItem( DXUTAPIVersionToString( version ) ) )\r
2133         pComboBox->AddItem( DXUTAPIVersionToString( version ), ULongToPtr( version ) );\r
2134 }\r
2135 \r
2136 \r
2137 //-------------------------------------------------------------------------------------\r
2138 DXUTDeviceVersion CD3DSettingsDlg::GetSelectedAPIVersion()\r
2139 {\r
2140     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION );\r
2141 \r
2142     return ( DXUTDeviceVersion )PtrToUlong( pComboBox->GetSelectedData() );\r
2143 }\r
2144 \r
2145 \r
2146 //-------------------------------------------------------------------------------------\r
2147 void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter )\r
2148 {\r
2149     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
2150 \r
2151     if( !pComboBox->ContainsItem( strDescription ) )\r
2152         pComboBox->AddItem( strDescription, ULongToPtr( iAdapter ) );\r
2153 }\r
2154 \r
2155 \r
2156 //-------------------------------------------------------------------------------------\r
2157 UINT CD3DSettingsDlg::GetSelectedAdapter()\r
2158 {\r
2159     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER );\r
2160 \r
2161     return PtrToUlong( pComboBox->GetSelectedData() );\r
2162 }\r
2163 \r
2164 \r
2165 //-------------------------------------------------------------------------------------\r
2166 void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType )\r
2167 {\r
2168     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
2169 \r
2170     if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString( devType ) ) )\r
2171         pComboBox->AddItem( DXUTD3DDeviceTypeToString( devType ), ULongToPtr( devType ) );\r
2172 }\r
2173 \r
2174 \r
2175 //-------------------------------------------------------------------------------------\r
2176 D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType()\r
2177 {\r
2178     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
2179 \r
2180     return ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() );\r
2181 }\r
2182 \r
2183 \r
2184 //-------------------------------------------------------------------------------------\r
2185 void CD3DSettingsDlg::SetWindowed( bool bWindowed )\r
2186 {\r
2187     CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );\r
2188     pRadioButton->SetChecked( bWindowed );\r
2189 \r
2190     pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN );\r
2191     pRadioButton->SetChecked( !bWindowed );\r
2192 }\r
2193 \r
2194 \r
2195 //-------------------------------------------------------------------------------------\r
2196 bool CD3DSettingsDlg::IsWindowed()\r
2197 {\r
2198     CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED );\r
2199     return pRadioButton->GetChecked();\r
2200 }\r
2201 \r
2202 \r
2203 //-------------------------------------------------------------------------------------\r
2204 void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format )\r
2205 {\r
2206     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );\r
2207 \r
2208     if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) )\r
2209         pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) );\r
2210 }\r
2211 \r
2212 \r
2213 //-------------------------------------------------------------------------------------\r
2214 D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat()\r
2215 {\r
2216     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT );\r
2217 \r
2218     return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
2219 }\r
2220 \r
2221 \r
2222 //-------------------------------------------------------------------------------------\r
2223 void CD3DSettingsDlg::AddD3D11AdapterOutput( const WCHAR* strName, UINT Output )\r
2224 {\r
2225     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT );\r
2226 \r
2227     if( !pComboBox->ContainsItem( strName ) )\r
2228         pComboBox->AddItem( strName, ULongToPtr( Output ) );\r
2229 }\r
2230 \r
2231 \r
2232 //-------------------------------------------------------------------------------------\r
2233 UINT CD3DSettingsDlg::GetSelectedD3D11AdapterOutput()\r
2234 {\r
2235     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT );\r
2236 \r
2237     return PtrToUlong( pComboBox->GetSelectedData() );\r
2238 }\r
2239 \r
2240 \r
2241 //-------------------------------------------------------------------------------------\r
2242 void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight )\r
2243 {\r
2244     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );\r
2245 \r
2246     DWORD dwResolutionData;\r
2247     WCHAR strResolution[50];\r
2248     dwResolutionData = MAKELONG( dwWidth, dwHeight );\r
2249     swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight );\r
2250 \r
2251     if( !pComboBox->ContainsItem( strResolution ) )\r
2252         pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) );\r
2253 }\r
2254 \r
2255 \r
2256 //-------------------------------------------------------------------------------------\r
2257 void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight )\r
2258 {\r
2259     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION );\r
2260 \r
2261     DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() );\r
2262 \r
2263     *pdwWidth = LOWORD( dwResolution );\r
2264     *pdwHeight = HIWORD( dwResolution );\r
2265 }\r
2266 \r
2267 \r
2268 //-------------------------------------------------------------------------------------\r
2269 void CD3DSettingsDlg::AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight )\r
2270 {\r
2271     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION );\r
2272 \r
2273     DWORD dwResolutionData;\r
2274     WCHAR strResolution[50];\r
2275     dwResolutionData = MAKELONG( dwWidth, dwHeight );\r
2276     swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight );\r
2277 \r
2278     if( !pComboBox->ContainsItem( strResolution ) )\r
2279         pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) );\r
2280 }\r
2281 \r
2282 \r
2283 //-------------------------------------------------------------------------------------\r
2284 void CD3DSettingsDlg::GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight )\r
2285 {\r
2286     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION );\r
2287 \r
2288     DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() );\r
2289 \r
2290     *pdwWidth = LOWORD( dwResolution );\r
2291     *pdwHeight = HIWORD( dwResolution );\r
2292 }\r
2293 \r
2294 void CD3DSettingsDlg::AddD3D11FeatureLevel(D3D_FEATURE_LEVEL fl) {\r
2295     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL );\r
2296     switch( fl )\r
2297     {\r
2298     case D3D_FEATURE_LEVEL_9_1: \r
2299         {\r
2300             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_1" ) )\r
2301                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_1", ULongToPtr( D3D_FEATURE_LEVEL_9_1 ) ); \r
2302         }\r
2303         break;\r
2304     case D3D_FEATURE_LEVEL_9_2: \r
2305         {\r
2306             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_2" ) )\r
2307                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_2", ULongToPtr( D3D_FEATURE_LEVEL_9_2 ) ); \r
2308         }\r
2309         break;\r
2310     case D3D_FEATURE_LEVEL_9_3: \r
2311         {\r
2312             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_3" ) )\r
2313                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_3", ULongToPtr( D3D_FEATURE_LEVEL_9_3 ) ); \r
2314         }\r
2315         break;\r
2316     case D3D_FEATURE_LEVEL_10_0: \r
2317         {\r
2318             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_0" ) )\r
2319                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_0", ULongToPtr( D3D_FEATURE_LEVEL_10_0 ) ); \r
2320         }\r
2321         break;\r
2322     case D3D_FEATURE_LEVEL_10_1: \r
2323         {\r
2324             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_1" ) )\r
2325                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_1", ULongToPtr( D3D_FEATURE_LEVEL_10_1 ) ); \r
2326         }\r
2327         break;\r
2328     case D3D_FEATURE_LEVEL_11_0: \r
2329         {\r
2330             if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_11_0" ) )\r
2331                 pComboBox->AddItem( L"D3D_FEATURE_LEVEL_11_0", ULongToPtr( D3D_FEATURE_LEVEL_11_0 ) ); \r
2332         }\r
2333         break;\r
2334     }\r
2335 \r
2336 }\r
2337 \r
2338 D3D_FEATURE_LEVEL CD3DSettingsDlg::GetSelectedFeatureLevel() {\r
2339     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL );\r
2340 \r
2341     return (D3D_FEATURE_LEVEL)PtrToUlong( pComboBox->GetSelectedData() );\r
2342 }\r
2343 //-------------------------------------------------------------------------------------\r
2344 void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate )\r
2345 {\r
2346     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );\r
2347 \r
2348     WCHAR strRefreshRate[50];\r
2349 \r
2350     if( dwRate == 0 )\r
2351         wcscpy_s( strRefreshRate, 50, L"Default Rate" );\r
2352     else\r
2353         swprintf_s( strRefreshRate, 50, L"%d Hz", dwRate );\r
2354 \r
2355     if( !pComboBox->ContainsItem( strRefreshRate ) )\r
2356         pComboBox->AddItem( strRefreshRate, ULongToPtr( dwRate ) );\r
2357 }\r
2358 \r
2359 \r
2360 //-------------------------------------------------------------------------------------\r
2361 DWORD CD3DSettingsDlg::GetSelectedRefreshRate()\r
2362 {\r
2363     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );\r
2364 \r
2365     return PtrToUlong( pComboBox->GetSelectedData() );\r
2366 }\r
2367 \r
2368 \r
2369 //-------------------------------------------------------------------------------------\r
2370 void CD3DSettingsDlg::AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate )\r
2371 {\r
2372     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE );\r
2373 \r
2374     WCHAR strRefreshRate[50];\r
2375 \r
2376     if( RefreshRate.Numerator == 0 && RefreshRate.Denominator == 0 )\r
2377         wcscpy_s( strRefreshRate, 50, L"Default Rate" );\r
2378     else\r
2379         swprintf_s( strRefreshRate, 50, L"%d Hz", RefreshRate.Numerator / RefreshRate.Denominator );\r
2380 \r
2381     if( !pComboBox->ContainsItem( strRefreshRate ) )\r
2382     {\r
2383         DXGI_RATIONAL* pNewRate = new DXGI_RATIONAL;\r
2384         if( pNewRate )\r
2385         {\r
2386             *pNewRate = RefreshRate;\r
2387             pComboBox->AddItem( strRefreshRate, pNewRate );\r
2388         }\r
2389     }\r
2390 }\r
2391 \r
2392 \r
2393 //-------------------------------------------------------------------------------------\r
2394 DXGI_RATIONAL CD3DSettingsDlg::GetSelectedD3D11RefreshRate()\r
2395 {\r
2396     DXGI_RATIONAL dxgiR;\r
2397     dxgiR.Numerator = 0;\r
2398     dxgiR.Denominator = 1;\r
2399     \r
2400     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE );\r
2401 \r
2402     return *reinterpret_cast<DXGI_RATIONAL*>( pComboBox->GetSelectedData() );\r
2403      \r
2404 }\r
2405 \r
2406 \r
2407 //-------------------------------------------------------------------------------------\r
2408 void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format )\r
2409 {\r
2410     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );\r
2411 \r
2412     if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) )\r
2413         pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) );\r
2414 }\r
2415 \r
2416 \r
2417 //-------------------------------------------------------------------------------------\r
2418 D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat()\r
2419 {\r
2420     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT );\r
2421 \r
2422     return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
2423 }\r
2424 \r
2425 \r
2426 //-------------------------------------------------------------------------------------\r
2427 void CD3DSettingsDlg::AddD3D11BackBufferFormat( DXGI_FORMAT format )\r
2428 {\r
2429     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT );\r
2430 \r
2431     if( !pComboBox->ContainsItem( DXUTDXGIFormatToString( format, TRUE ) ) )\r
2432         pComboBox->AddItem( DXUTDXGIFormatToString( format, TRUE ), ULongToPtr( format ) );\r
2433 }\r
2434 \r
2435 \r
2436 //-------------------------------------------------------------------------------------\r
2437 DXGI_FORMAT CD3DSettingsDlg::GetSelectedD3D11BackBufferFormat()\r
2438 {\r
2439     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT );\r
2440 \r
2441     return ( DXGI_FORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
2442 }\r
2443 \r
2444 \r
2445 //-------------------------------------------------------------------------------------\r
2446 void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format )\r
2447 {\r
2448     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );\r
2449 \r
2450     if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) )\r
2451         pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) );\r
2452 }\r
2453 \r
2454 \r
2455 //-------------------------------------------------------------------------------------\r
2456 D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat()\r
2457 {\r
2458     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );\r
2459 \r
2460     return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() );\r
2461 }\r
2462 \r
2463 \r
2464 //-------------------------------------------------------------------------------------\r
2465 void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type )\r
2466 {\r
2467     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );\r
2468 \r
2469     if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString( type ) ) )\r
2470         pComboBox->AddItem( DXUTMultisampleTypeToString( type ), ULongToPtr( type ) );\r
2471 }\r
2472 \r
2473 \r
2474 //-------------------------------------------------------------------------------------\r
2475 D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType()\r
2476 {\r
2477     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE );\r
2478 \r
2479     return ( D3DMULTISAMPLE_TYPE )PtrToUlong( pComboBox->GetSelectedData() );\r
2480 }\r
2481 \r
2482 \r
2483 //-------------------------------------------------------------------------------------\r
2484 void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality )\r
2485 {\r
2486     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );\r
2487 \r
2488     WCHAR strQuality[50];\r
2489     swprintf_s( strQuality, 50, L"%d", dwQuality );\r
2490 \r
2491     if( !pComboBox->ContainsItem( strQuality ) )\r
2492         pComboBox->AddItem( strQuality, ULongToPtr( dwQuality ) );\r
2493 }\r
2494 \r
2495 \r
2496 //-------------------------------------------------------------------------------------\r
2497 DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality()\r
2498 {\r
2499     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY );\r
2500 \r
2501     return PtrToUlong( pComboBox->GetSelectedData() );\r
2502 }\r
2503 \r
2504 \r
2505 //-------------------------------------------------------------------------------------\r
2506 void CD3DSettingsDlg::AddD3D11MultisampleCount( UINT Count )\r
2507 {\r
2508     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT );\r
2509 \r
2510     WCHAR str[50];\r
2511     swprintf_s( str, 50, L"%u", Count );\r
2512 \r
2513     if( !pComboBox->ContainsItem( str ) )\r
2514         pComboBox->AddItem( str, ULongToPtr( Count ) );\r
2515 }\r
2516 \r
2517 \r
2518 //-------------------------------------------------------------------------------------\r
2519 UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleCount()\r
2520 {\r
2521     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT );\r
2522 \r
2523     return ( UINT )PtrToUlong( pComboBox->GetSelectedData() );\r
2524 }\r
2525 \r
2526 \r
2527 //-------------------------------------------------------------------------------------\r
2528 void CD3DSettingsDlg::AddD3D11MultisampleQuality( UINT Quality )\r
2529 {\r
2530     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY );\r
2531 \r
2532     WCHAR strQuality[50];\r
2533     swprintf_s( strQuality, 50, L"%d", Quality );\r
2534 \r
2535     if( !pComboBox->ContainsItem( strQuality ) )\r
2536         pComboBox->AddItem( strQuality, ULongToPtr( Quality ) );\r
2537 }\r
2538 \r
2539 \r
2540 //-------------------------------------------------------------------------------------\r
2541 UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleQuality()\r
2542 {\r
2543     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY );\r
2544 \r
2545     return ( UINT )PtrToUlong( pComboBox->GetSelectedData() );\r
2546 }\r
2547 \r
2548 \r
2549 //-------------------------------------------------------------------------------------\r
2550 void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType )\r
2551 {\r
2552     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );\r
2553 \r
2554     if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString( dwType ) ) )\r
2555         pComboBox->AddItem( DXUTVertexProcessingTypeToString( dwType ), ULongToPtr( dwType ) );\r
2556 }\r
2557 \r
2558 \r
2559 //-------------------------------------------------------------------------------------\r
2560 DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType()\r
2561 {\r
2562     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING );\r
2563 \r
2564     return PtrToUlong( pComboBox->GetSelectedData() );\r
2565 }\r
2566 \r
2567 \r
2568 //-------------------------------------------------------------------------------------\r
2569 DWORD CD3DSettingsDlg::GetSelectedPresentInterval()\r
2570 {\r
2571     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL );\r
2572 \r
2573     return PtrToUlong( pComboBox->GetSelectedData() );\r
2574 }\r
2575 \r
2576 \r
2577 //-------------------------------------------------------------------------------------\r
2578 DWORD CD3DSettingsDlg::GetSelectedD3D11PresentInterval()\r
2579 {\r
2580     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL );\r
2581 \r
2582     return PtrToUlong( pComboBox->GetSelectedData() );\r
2583 }\r
2584 \r
2585 //-------------------------------------------------------------------------------------\r
2586 bool CD3DSettingsDlg::GetSelectedDebugDeviceValue()\r
2587 {\r
2588     CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE );\r
2589 \r
2590     return pCheckBox->GetChecked();\r
2591 }\r
2592 \r
2593 \r
2594 //-------------------------------------------------------------------------------------\r
2595 void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip )\r
2596 {\r
2597     CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP );\r
2598     pCheckBox->SetChecked( bDeviceClip );\r
2599 }\r
2600 \r
2601 \r
2602 //-------------------------------------------------------------------------------------\r
2603 bool CD3DSettingsDlg::IsDeviceClip()\r
2604 {\r
2605     CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP );\r
2606     return pCheckBox->GetChecked();\r
2607 }\r
2608 \r
2609 //--------------------------------------------------------------------------------------\r
2610 // Updates the resolution list for D3D11\r
2611 //--------------------------------------------------------------------------------------\r
2612 HRESULT CD3DSettingsDlg::UpdateD3D11Resolutions()\r
2613 {\r
2614 \r
2615     const DWORD dwWidth = g_DeviceSettings.d3d11.sd.BufferDesc.Width;\r
2616     const DWORD dwHeight = g_DeviceSettings.d3d11.sd.BufferDesc.Height;\r
2617 \r
2618     // DXUTSETTINGSDLG_D3D11_RESOLUTION\r
2619     CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION );\r
2620     pResolutionComboBox->RemoveAllItems();\r
2621 \r
2622     CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo();\r
2623     if( pOutputInfo == NULL )\r
2624         return E_FAIL;\r
2625 \r
2626     bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked();\r
2627 \r
2628     // Get the desktop aspect ratio\r
2629     DXGI_MODE_DESC dmDesktop;\r
2630     DXUTGetDesktopResolution( g_DeviceSettings.d3d11.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height );\r
2631     float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height;\r
2632 \r
2633     for( int idm = 0; idm < pOutputInfo->displayModeList.GetSize(); idm++ )\r
2634     {\r
2635         DXGI_MODE_DESC DisplayMode = pOutputInfo->displayModeList.GetAt( idm );\r
2636         float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height;\r
2637 \r
2638         if( DisplayMode.Format == g_DeviceSettings.d3d11.sd.BufferDesc.Format )\r
2639         {\r
2640             // If "Show All" is not checked, then hide all resolutions\r
2641             // that don't match the aspect ratio of the desktop resolution\r
2642             if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) )\r
2643             {\r
2644                 AddD3D11Resolution( DisplayMode.Width, DisplayMode.Height );\r
2645             }\r
2646         }\r
2647     }\r
2648 \r
2649     const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d11.sd.BufferDesc.Width,\r
2650                                             g_DeviceSettings.d3d11.sd.BufferDesc.Height );\r
2651 \r
2652     pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) );\r
2653 \r
2654 \r
2655     bool bWindowed = IsWindowed();\r
2656     if( bWindowed )\r
2657     {\r
2658         pResolutionComboBox->RemoveAllItems();\r
2659         AddD3D11Resolution( dwWidth, dwHeight );\r
2660 \r
2661         pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) );\r
2662 \r
2663 \r
2664     }\r
2665 \r
2666     return S_OK;\r
2667 }\r
2668 \r
2669 \r
2670 //\r
2671 //-------------------------------------------------------------------------------------\r
2672 void CD3DSettingsDlg::AddD3D11DeviceType( D3D_DRIVER_TYPE devType )\r
2673 {\r
2674     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
2675 \r
2676     if( !pComboBox->ContainsItem( DXUTD3DX11DeviceTypeToString( devType ) ) )\r
2677         pComboBox->AddItem( DXUTD3DX11DeviceTypeToString( devType ), ULongToPtr( devType ) );\r
2678 }\r
2679 \r
2680 \r
2681 //-------------------------------------------------------------------------------------\r
2682 D3D_DRIVER_TYPE CD3DSettingsDlg::GetSelectedD3D11DeviceType()\r
2683 {\r
2684     CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE );\r
2685 \r
2686     return ( D3D_DRIVER_TYPE )PtrToUlong( pComboBox->GetSelectedData() );\r
2687 }\r
2688 \r
2689 \r
2690 void CD3DSettingsDlg::UpdateModeChangeTimeoutText( int nSecRemaining )\r
2691 {\r
2692     const WCHAR StrTimeout[] = L"Reverting to previous display settings in %d seconds";\r
2693     const DWORD CchBuf = sizeof( StrTimeout ) / sizeof( WCHAR ) + 16;\r
2694     WCHAR buf[CchBuf];\r
2695 \r
2696     swprintf_s( buf, CchBuf, StrTimeout, nSecRemaining );\r
2697 \r
2698     CDXUTStatic* pStatic = m_RevertModeDialog.GetStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT );\r
2699     pStatic->SetText( buf );\r
2700 }\r
2701 \r
2702 //--------------------------------------------------------------------------------------\r
2703 // Returns the string for the given DXUTDeviceVersion.\r
2704 //--------------------------------------------------------------------------------------\r
2705 WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version )\r
2706 {\r
2707     switch( version )\r
2708     {\r
2709         case DXUT_D3D9_DEVICE:\r
2710             return L"Direct3D 9";\r
2711                 case DXUT_D3D11_DEVICE:\r
2712                         return L"Direct3D 11";\r
2713         default:\r
2714             return L"Unknown version";\r
2715     }\r
2716 }\r
2717 \r
2718 \r
2719 //--------------------------------------------------------------------------------------\r
2720 // Returns the string for the given D3DDEVTYPE.\r
2721 //--------------------------------------------------------------------------------------\r
2722 WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType )\r
2723 {\r
2724     switch( devType )\r
2725     {\r
2726         case D3DDEVTYPE_HAL:\r
2727             return L"D3DDEVTYPE_HAL";\r
2728         case D3DDEVTYPE_SW:\r
2729             return L"D3DDEVTYPE_SW";\r
2730         case D3DDEVTYPE_REF:\r
2731             return L"D3DDEVTYPE_REF";\r
2732         default:\r
2733             return L"Unknown devType";\r
2734     }\r
2735 }\r
2736 \r
2737 \r
2738 \r
2739 \r
2740 //--------------------------------------------------------------------------------------\r
2741 // Returns the string for the given D3D_DRIVER_TYPE.\r
2742 //--------------------------------------------------------------------------------------\r
2743 WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType )\r
2744 {\r
2745     switch( devType )\r
2746     {\r
2747         case D3D_DRIVER_TYPE_HARDWARE:\r
2748             return L"D3D_DRIVER_TYPE_HARDWARE";\r
2749         case D3D_DRIVER_TYPE_REFERENCE:\r
2750             return L"D3D_DRIVER_TYPE_REFERENCE";\r
2751         case D3D_DRIVER_TYPE_NULL:\r
2752             return L"D3D_DRIVER_TYPE_NULL";\r
2753         case D3D_DRIVER_TYPE_WARP:\r
2754             return L"D3D_DRIVER_TYPE_WARP";\r
2755         default:\r
2756             return L"Unknown devType";\r
2757     }\r
2758 }\r
2759 \r
2760 \r
2761 //--------------------------------------------------------------------------------------\r
2762 // Returns the string for the given D3DMULTISAMPLE_TYPE.\r
2763 //--------------------------------------------------------------------------------------\r
2764 WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType )\r
2765 {\r
2766     switch( MultiSampleType )\r
2767     {\r
2768         case D3DMULTISAMPLE_NONE:\r
2769             return L"D3DMULTISAMPLE_NONE";\r
2770         case D3DMULTISAMPLE_NONMASKABLE:\r
2771             return L"D3DMULTISAMPLE_NONMASKABLE";\r
2772         case D3DMULTISAMPLE_2_SAMPLES:\r
2773             return L"D3DMULTISAMPLE_2_SAMPLES";\r
2774         case D3DMULTISAMPLE_3_SAMPLES:\r
2775             return L"D3DMULTISAMPLE_3_SAMPLES";\r
2776         case D3DMULTISAMPLE_4_SAMPLES:\r
2777             return L"D3DMULTISAMPLE_4_SAMPLES";\r
2778         case D3DMULTISAMPLE_5_SAMPLES:\r
2779             return L"D3DMULTISAMPLE_5_SAMPLES";\r
2780         case D3DMULTISAMPLE_6_SAMPLES:\r
2781             return L"D3DMULTISAMPLE_6_SAMPLES";\r
2782         case D3DMULTISAMPLE_7_SAMPLES:\r
2783             return L"D3DMULTISAMPLE_7_SAMPLES";\r
2784         case D3DMULTISAMPLE_8_SAMPLES:\r
2785             return L"D3DMULTISAMPLE_8_SAMPLES";\r
2786         case D3DMULTISAMPLE_9_SAMPLES:\r
2787             return L"D3DMULTISAMPLE_9_SAMPLES";\r
2788         case D3DMULTISAMPLE_10_SAMPLES:\r
2789             return L"D3DMULTISAMPLE_10_SAMPLES";\r
2790         case D3DMULTISAMPLE_11_SAMPLES:\r
2791             return L"D3DMULTISAMPLE_11_SAMPLES";\r
2792         case D3DMULTISAMPLE_12_SAMPLES:\r
2793             return L"D3DMULTISAMPLE_12_SAMPLES";\r
2794         case D3DMULTISAMPLE_13_SAMPLES:\r
2795             return L"D3DMULTISAMPLE_13_SAMPLES";\r
2796         case D3DMULTISAMPLE_14_SAMPLES:\r
2797             return L"D3DMULTISAMPLE_14_SAMPLES";\r
2798         case D3DMULTISAMPLE_15_SAMPLES:\r
2799             return L"D3DMULTISAMPLE_15_SAMPLES";\r
2800         case D3DMULTISAMPLE_16_SAMPLES:\r
2801             return L"D3DMULTISAMPLE_16_SAMPLES";\r
2802         default:\r
2803             return L"Unknown Multisample Type";\r
2804     }\r
2805 }\r
2806 \r
2807 \r
2808 //--------------------------------------------------------------------------------------\r
2809 // Returns the string for the given vertex processing type\r
2810 //--------------------------------------------------------------------------------------\r
2811 WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt )\r
2812 {\r
2813     switch( vpt )\r
2814     {\r
2815         case D3DCREATE_SOFTWARE_VERTEXPROCESSING:\r
2816             return L"Software vertex processing";\r
2817         case D3DCREATE_MIXED_VERTEXPROCESSING:\r
2818             return L"Mixed vertex processing";\r
2819         case D3DCREATE_HARDWARE_VERTEXPROCESSING:\r
2820             return L"Hardware vertex processing";\r
2821         case D3DCREATE_PUREDEVICE:\r
2822             return L"Pure hardware vertex processing";\r
2823         default:\r
2824             return L"Unknown vertex processing type";\r
2825     }\r
2826 }\r
2827 \r
2828 \r
2829 //--------------------------------------------------------------------------------------\r
2830 // Returns the string for the given present interval.\r
2831 //--------------------------------------------------------------------------------------\r
2832 WCHAR* DXUTPresentIntervalToString( UINT pi )\r
2833 {\r
2834     switch( pi )\r
2835     {\r
2836         case D3DPRESENT_INTERVAL_IMMEDIATE:\r
2837             return L"D3DPRESENT_INTERVAL_IMMEDIATE";\r
2838         case D3DPRESENT_INTERVAL_DEFAULT:\r
2839             return L"D3DPRESENT_INTERVAL_DEFAULT";\r
2840         case D3DPRESENT_INTERVAL_ONE:\r
2841             return L"D3DPRESENT_INTERVAL_ONE";\r
2842         case D3DPRESENT_INTERVAL_TWO:\r
2843             return L"D3DPRESENT_INTERVAL_TWO";\r
2844         case D3DPRESENT_INTERVAL_THREE:\r
2845             return L"D3DPRESENT_INTERVAL_THREE";\r
2846         case D3DPRESENT_INTERVAL_FOUR:\r
2847             return L"D3DPRESENT_INTERVAL_FOUR";\r
2848         default:\r
2849             return L"Unknown PresentInterval";\r
2850     }\r
2851 }\r
2852 \r
2853 \r