summaryrefslogtreecommitdiff
path: root/demo/common/DXUTsettingsdlg.h
blob: 5d4db4f692bed87d98d9878abe2294503393fcf4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
//--------------------------------------------------------------------------------------
// File: DXUTSettingsDlg.cpp
//
// Copyright (c) Microsoft Corporation. All rights reserved
//--------------------------------------------------------------------------------------
#pragma once
#ifndef DXUT_SETTINGS_H
#define DXUT_SETTINGS_H

//--------------------------------------------------------------------------------------
// Header Includes
//--------------------------------------------------------------------------------------
#include "DXUTgui.h"
//--------------------------------------------------------------------------------------
// Control IDs
//--------------------------------------------------------------------------------------
#define DXUTSETTINGSDLG_STATIC                          -1
#define DXUTSETTINGSDLG_OK                              1
#define DXUTSETTINGSDLG_CANCEL                          2
#define DXUTSETTINGSDLG_ADAPTER                         3
#define DXUTSETTINGSDLG_DEVICE_TYPE                     4
#define DXUTSETTINGSDLG_WINDOWED                        5
#define DXUTSETTINGSDLG_FULLSCREEN                      6
#define DXUTSETTINGSDLG_ADAPTER_FORMAT                  7
#define DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL            8
#define DXUTSETTINGSDLG_RESOLUTION                      9
#define DXUTSETTINGSDLG_RESOLUTION_LABEL                10
#define DXUTSETTINGSDLG_REFRESH_RATE                    11
#define DXUTSETTINGSDLG_REFRESH_RATE_LABEL              12
#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT              13
#define DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL        14
#define DXUTSETTINGSDLG_DEPTH_STENCIL                   15
#define DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL             16
#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE                17
#define DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL          18
#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY             19
#define DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL       20
#define DXUTSETTINGSDLG_VERTEX_PROCESSING               21
#define DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL         22
#define DXUTSETTINGSDLG_PRESENT_INTERVAL                23
#define DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL          24
#define DXUTSETTINGSDLG_DEVICECLIP                      25
#define DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL             26
#define DXUTSETTINGSDLG_API_VERSION                     27
#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT            28
#define DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL      29
#define DXUTSETTINGSDLG_D3D11_RESOLUTION                30
#define DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL          31
#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE              32
#define DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL        33
#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT        34
#define DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL  35
#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT         36
#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL   37
#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY       38
#define DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL 39
#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL          40
#define DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL    41
#define DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE              42
#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL             43
#define DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL       44

#define DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT              58
#define DXUTSETTINGSDLG_MODE_CHANGE_REVERT              59
#define DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT      60
#define DXUTSETTINGSDLG_WINDOWED_GROUP                  0x0100

#define TOTAL_FEATURE_LEVLES                            6
//--------------------------------------------------------------------------------------
// Dialog for selection of device settings 
// Use DXUTGetD3DSettingsDialog() to access global instance
// To control the contents of the dialog, use the CD3D9Enumeration class.
//--------------------------------------------------------------------------------------
class CD3DSettingsDlg
{
public:
                        CD3DSettingsDlg();
                        ~CD3DSettingsDlg();

    void                Init( CDXUTDialogResourceManager* pManager );
    void                Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName );
    void                Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename,
                              HMODULE hModule );

    HRESULT             Refresh();
    void                OnRender( float fElapsedTime );
    void                OnRender9( float fElapsedTime );
    void                OnRender10( float fElapsedTime );
    void                OnRender11( float fElapsedTime );

    HRESULT             OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice );
    HRESULT             OnD3D9ResetDevice();
    void                OnD3D9LostDevice();
    void                OnD3D9DestroyDevice();

    HRESULT             OnD3D11CreateDevice( ID3D11Device* pd3dDevice );
    HRESULT             OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice,
                                                 const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc );
    void                OnD3D11DestroyDevice();

    CDXUTDialog* GetDialogControl()
    {
        return &m_Dialog;
    }
    bool                IsActive()
    {
        return m_bActive;
    }
    void                SetActive( bool bActive )
    {
        m_bActive = bActive; if( bActive ) Refresh();
    }
    void                ShowControlSet( DXUTDeviceVersion ver );

    LRESULT             MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );

protected:
    friend CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog();

    void                CreateControls();
    HRESULT             SetDeviceSettingsFromUI();
    void                SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate );
    HRESULT             UpdateD3D11Resolutions();

    void                OnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl );
    static void WINAPI  StaticOnEvent( UINT nEvent, int nControlID, CDXUTControl* pControl, void* pUserData );
    static void WINAPI  StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext );

    CD3D9EnumAdapterInfo* GetCurrentAdapterInfo();
    CD3D9EnumDeviceInfo* GetCurrentDeviceInfo();
    CD3D9EnumDeviceSettingsCombo* GetCurrentDeviceSettingsCombo();

    CD3D11EnumAdapterInfo* GetCurrentD3D11AdapterInfo();
    CD3D11EnumDeviceInfo* GetCurrentD3D11DeviceInfo();
    CD3D11EnumOutputInfo* GetCurrentD3D11OutputInfo();
    CD3D11EnumDeviceSettingsCombo* GetCurrentD3D11DeviceSettingsCombo();

    void                AddAPIVersion( DXUTDeviceVersion version );
    DXUTDeviceVersion   GetSelectedAPIVersion();

    void                AddAdapter( const WCHAR* strDescription, UINT iAdapter );
    UINT                GetSelectedAdapter();

    void                AddDeviceType( D3DDEVTYPE devType );
    D3DDEVTYPE          GetSelectedDeviceType();

    void                SetWindowed( bool bWindowed );
    bool                IsWindowed();

    void                AddAdapterFormat( D3DFORMAT format );
    D3DFORMAT           GetSelectedAdapterFormat();

    void                AddResolution( DWORD dwWidth, DWORD dwHeight );
    void                GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight );

    void                AddRefreshRate( DWORD dwRate );
    DWORD               GetSelectedRefreshRate();

    void                AddBackBufferFormat( D3DFORMAT format );
    D3DFORMAT           GetSelectedBackBufferFormat();

    void                AddDepthStencilBufferFormat( D3DFORMAT format );
    D3DFORMAT           GetSelectedDepthStencilBufferFormat();

    void                AddMultisampleType( D3DMULTISAMPLE_TYPE type );
    D3DMULTISAMPLE_TYPE GetSelectedMultisampleType();

    void                AddMultisampleQuality( DWORD dwQuality );
    DWORD               GetSelectedMultisampleQuality();

    void                AddVertexProcessingType( DWORD dwType );
    DWORD               GetSelectedVertexProcessingType();

    DWORD               GetSelectedPresentInterval();

    void                SetDeviceClip( bool bDeviceClip );
    bool                IsDeviceClip();

    // D3D11
    void                AddD3D11DeviceType( D3D_DRIVER_TYPE devType );
    D3D_DRIVER_TYPE   GetSelectedD3D11DeviceType();

    void                AddD3D11AdapterOutput( const WCHAR* strName, UINT nOutput );
    UINT                GetSelectedD3D11AdapterOutput();

    void                AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight );
    void                GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight );

    void                AddD3D11FeatureLevel(D3D_FEATURE_LEVEL);
    D3D_FEATURE_LEVEL   GetSelectedFeatureLevel();

    void                AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate );
    DXGI_RATIONAL       GetSelectedD3D11RefreshRate();

    void                AddD3D11BackBufferFormat( DXGI_FORMAT format );
    DXGI_FORMAT         GetSelectedD3D11BackBufferFormat();

    void                AddD3D11MultisampleCount( UINT count );
    UINT                GetSelectedD3D11MultisampleCount();

    void                AddD3D11MultisampleQuality( UINT Quality );
    UINT                GetSelectedD3D11MultisampleQuality();

    DWORD               GetSelectedD3D11PresentInterval();
    bool                GetSelectedDebugDeviceValue();



    HRESULT             OnD3D11ResolutionChanged ();
    HRESULT             OnAPIVersionChanged( bool bRefresh=false );
    HRESULT             OnFeatureLevelChanged();
    HRESULT             OnAdapterChanged();
    HRESULT             OnDeviceTypeChanged();
    HRESULT             OnWindowedFullScreenChanged();
    HRESULT             OnAdapterOutputChanged();
    HRESULT             OnAdapterFormatChanged();
    HRESULT             OnResolutionChanged();
    HRESULT             OnRefreshRateChanged();
    HRESULT             OnBackBufferFormatChanged();
    HRESULT             OnDepthStencilBufferFormatChanged();
    HRESULT             OnMultisampleTypeChanged();
    HRESULT             OnMultisampleQualityChanged();
    HRESULT             OnVertexProcessingChanged();
    HRESULT             OnPresentIntervalChanged();
    HRESULT             OnDebugDeviceChanged();
    HRESULT             OnDeviceClipChanged();

    void                UpdateModeChangeTimeoutText( int nSecRemaining );

    IDirect3DStateBlock9* m_pStateBlock;
    CDXUTDialog* m_pActiveDialog;
    CDXUTDialog m_Dialog;
    CDXUTDialog m_RevertModeDialog;
    int m_nRevertModeTimeout;
    UINT m_nIDEvent;
    bool m_bActive;

    D3D_FEATURE_LEVEL m_Levels[TOTAL_FEATURE_LEVLES];

};


CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog();



#endif