DXUT/Optional/DXUTsettingsdlg.h

166 строки
7.1 KiB
C++

//--------------------------------------------------------------------------------------
// File: DXUTSettingsDlg.h
//
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
//
// http://go.microsoft.com/fwlink/?LinkId=320437
//--------------------------------------------------------------------------------------
#pragma once
//--------------------------------------------------------------------------------------
// 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_RESOLUTION_SHOW_ALL 26
#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_LEVELS 9
//--------------------------------------------------------------------------------------
// Dialog for selection of device settings
// Use DXUTGetD3DSettingsDialog() to access global instance
// To control the contents of the dialog, use the CD3D11Enumeration class.
//--------------------------------------------------------------------------------------
class CD3DSettingsDlg
{
public:
CD3DSettingsDlg() noexcept;
~CD3DSettingsDlg();
void Init( _In_ CDXUTDialogResourceManager* pManager );
void Init( _In_ CDXUTDialogResourceManager* pManager, _In_z_ LPCWSTR szControlTextureFileName );
void Init( _In_ CDXUTDialogResourceManager* pManager, _In_z_ LPCWSTR pszControlTextureResourcename,
_In_ HMODULE hModule );
HRESULT Refresh();
void OnRender( _In_ float fElapsedTime );
HRESULT OnD3D11CreateDevice( _In_ ID3D11Device* pd3dDevice );
HRESULT OnD3D11ResizedSwapChain( _In_ ID3D11Device* pd3dDevice,
_In_ const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc );
void OnD3D11DestroyDevice();
CDXUTDialog* GetDialogControl() { return &m_Dialog; }
bool IsActive() const { return m_bActive; }
void SetActive( _In_ bool bActive )
{
m_bActive = bActive;
if( bActive ) Refresh();
}
LRESULT MsgProc( _In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam );
protected:
friend CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog();
void CreateControls();
void SetSelectedD3D11RefreshRate( _In_ DXGI_RATIONAL RefreshRate );
HRESULT UpdateD3D11Resolutions();
HRESULT UpdateD3D11RefreshRates();
void OnEvent( _In_ UINT nEvent, _In_ int nControlID, _In_ CDXUTControl* pControl );
static void WINAPI StaticOnEvent( _In_ UINT nEvent, _In_ int nControlID, _In_ CDXUTControl* pControl, _In_opt_ void* pUserData );
static void WINAPI StaticOnModeChangeTimer( _In_ UINT nIDEvent, _In_opt_ void* pUserContext );
CD3D11EnumAdapterInfo* GetCurrentD3D11AdapterInfo() const;
CD3D11EnumDeviceInfo* GetCurrentD3D11DeviceInfo() const;
CD3D11EnumOutputInfo* GetCurrentD3D11OutputInfo() const;
CD3D11EnumDeviceSettingsCombo* GetCurrentD3D11DeviceSettingsCombo() const;
void AddAdapter( _In_z_ const WCHAR* strDescription, _In_ UINT iAdapter );
UINT GetSelectedAdapter() const;
void SetWindowed( _In_ bool bWindowed );
bool IsWindowed() const;
// D3D11
void AddD3D11DeviceType( _In_ D3D_DRIVER_TYPE devType );
D3D_DRIVER_TYPE GetSelectedD3D11DeviceType() const;
void AddD3D11AdapterOutput( _In_z_ const WCHAR* strName, _In_ UINT nOutput );
UINT GetSelectedD3D11AdapterOutput() const;
void AddD3D11Resolution( _In_ DWORD dwWidth, _In_ DWORD dwHeight );
void GetSelectedD3D11Resolution( _Out_ DWORD* pdwWidth, _Out_ DWORD* pdwHeight ) const;
void AddD3D11FeatureLevel( _In_ D3D_FEATURE_LEVEL fl );
D3D_FEATURE_LEVEL GetSelectedFeatureLevel() const;
void AddD3D11RefreshRate( _In_ DXGI_RATIONAL RefreshRate );
DXGI_RATIONAL GetSelectedD3D11RefreshRate() const;
void AddD3D11BackBufferFormat( _In_ DXGI_FORMAT format );
DXGI_FORMAT GetSelectedD3D11BackBufferFormat() const;
void AddD3D11MultisampleCount( _In_ UINT count );
UINT GetSelectedD3D11MultisampleCount() const;
void AddD3D11MultisampleQuality( _In_ UINT Quality );
UINT GetSelectedD3D11MultisampleQuality() const;
DWORD GetSelectedD3D11PresentInterval() const;
bool GetSelectedDebugDeviceValue() const;
HRESULT OnD3D11ResolutionChanged ();
HRESULT OnFeatureLevelChanged();
HRESULT OnAdapterChanged();
HRESULT OnDeviceTypeChanged();
HRESULT OnWindowedFullScreenChanged();
HRESULT OnAdapterOutputChanged();
HRESULT OnRefreshRateChanged();
HRESULT OnBackBufferFormatChanged();
HRESULT OnMultisampleTypeChanged();
HRESULT OnMultisampleQualityChanged();
HRESULT OnPresentIntervalChanged();
HRESULT OnDebugDeviceChanged();
void UpdateModeChangeTimeoutText( _In_ int nSecRemaining );
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_LEVELS];
};
CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog();