diff options
| author | Jason Maskell <[email protected]> | 2016-05-12 10:58:15 +0200 |
|---|---|---|
| committer | Jason Maskell <[email protected]> | 2016-05-12 10:58:15 +0200 |
| commit | 72b21c69e32c73abf3a18b0e962746e64faebba4 (patch) | |
| tree | cd22b1b298bc865c3ae6037e8eb89a64a94203ea /sample/d3d11/common/DXUTsettingsdlg.cpp | |
| parent | Merge branch 'master' of https://github.com/NVIDIAGameWorks/WaveWorks (diff) | |
| download | waveworks_archive-72b21c69e32c73abf3a18b0e962746e64faebba4.tar.xz waveworks_archive-72b21c69e32c73abf3a18b0e962746e64faebba4.zip | |
Restructuring starts. Got some initial CMake problems sorted. Need to extend.
Diffstat (limited to 'sample/d3d11/common/DXUTsettingsdlg.cpp')
| -rw-r--r-- | sample/d3d11/common/DXUTsettingsdlg.cpp | 2853 |
1 files changed, 0 insertions, 2853 deletions
diff --git a/sample/d3d11/common/DXUTsettingsdlg.cpp b/sample/d3d11/common/DXUTsettingsdlg.cpp deleted file mode 100644 index 6cf495b..0000000 --- a/sample/d3d11/common/DXUTsettingsdlg.cpp +++ /dev/null @@ -1,2853 +0,0 @@ -//-------------------------------------------------------------------------------------- -// File: DXUTSettingsDlg.cpp -// -// Dialog for selection of device settings -// -// Copyright (c) Microsoft Corporation. All rights reserved -//-------------------------------------------------------------------------------------- -#include "DXUT.h" -#include "DXUTgui.h" -#include "DXUTsettingsDlg.h" -#undef min // use __min instead -#undef max // use __max instead - - -//-------------------------------------------------------------------------------------- -// Internal functions forward declarations -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ); -WCHAR* DXUTPresentIntervalToString( UINT pi ); -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ); -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ); -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ); -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ); - - -HRESULT DXUTSnapDeviceSettingsToEnumDevice( DXUTDeviceSettings* pDeviceSettings, bool forceEnum, D3D_FEATURE_LEVEL forceFL = D3D_FEATURE_LEVEL(0) ); - -//-------------------------------------------------------------------------------------- -// Global state -//-------------------------------------------------------------------------------------- -DXUTDeviceSettings g_DeviceSettings; - -CD3DSettingsDlg* WINAPI DXUTGetD3DSettingsDialog() -{ - // Using an accessor function gives control of the construction order - static CD3DSettingsDlg dlg; - return &dlg; -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::CD3DSettingsDlg() -{ - m_pStateBlock = NULL; - m_bActive = false; - m_pActiveDialog = NULL; - - m_Levels[0] = D3D_FEATURE_LEVEL_9_1; - m_Levels[1] = D3D_FEATURE_LEVEL_9_2; - m_Levels[2] = D3D_FEATURE_LEVEL_9_3; - m_Levels[3] = D3D_FEATURE_LEVEL_10_0; - m_Levels[4] = D3D_FEATURE_LEVEL_10_1; - m_Levels[5] = D3D_FEATURE_LEVEL_11_0; - -} - - -//-------------------------------------------------------------------------------------- -CD3DSettingsDlg::~CD3DSettingsDlg() -{ - // Release the memory used to hold the D3D11 refresh data in the combo box - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - if( pComboBox ) - for( UINT i = 0; i < pComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = reinterpret_cast<DXGI_RATIONAL*>( pComboBox->GetItemData( i ) ); - delete pRate; - } -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR szControlTextureFileName ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, szControlTextureFileName ); // Don't register this dialog. - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::Init( CDXUTDialogResourceManager* pManager, LPCWSTR pszControlTextureResourcename, - HMODULE hModule ) -{ - assert( pManager ); - m_Dialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog. - m_RevertModeDialog.Init( pManager, false, pszControlTextureResourcename, hModule ); // Don't register this dialog - m_pActiveDialog = &m_Dialog; - CreateControls(); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::CreateControls() -{ - // Set up main settings dialog - m_Dialog.EnableKeyboardInput( true ); - m_Dialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_Dialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - // Right-justify static controls - CDXUTElement* pElement = m_Dialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Direct3D Settings", 10, 5, 400, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_API_VERSION - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"API Version", 10, 35, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_API_VERSION, 200, 35, 300, 23 ); - - - //DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL, L"Feature Level", 10, 60, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL, 200, 60, 300, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetDropHeight( 106 ); - - - // DXUTSETTINGSDLG_ADAPTER - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Display Adapter", 10, 85, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER, 200, 85, 300, 23 ); - - // DXUTSETTINGSDLG_DEVICE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Render Device", 10, 110, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEVICE_TYPE, 200, 110, 300, 23 ); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_DEVICECLIP, L"Clip to device when window spans across multiple monitors", - 250, 136, 500, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Windowed", - 360, 157, 100, 16 ); - m_Dialog.AddRadioButton( DXUTSETTINGSDLG_FULLSCREEN, DXUTSETTINGSDLG_WINDOWED_GROUP, L"Full Screen", - 220, 157, 100, 16 ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, L"Adapter Format", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_RES_SHOW_ALL - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, L"Show All Aspect Ratios", 420, 200, 200, 23, false ); - - // DXUTSETTINGSDLG_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_DEPTH_STENCIL - m_Dialog.AddStatic( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL, L"Depth/Stencil Format", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_TYPE - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL, L"Multisample Type", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_VERTEX_PROCESSING - m_Dialog.AddStatic( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL, L"Vertex Processing", 10, 360, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING, 200, 360, 300, 23 ); - - // DXUTSETTINGSDLG_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 385, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL, 200, 385, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, L"Adapter Output", 10, 175, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, 200, 175, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, L"Resolution", 10, 200, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION, 200, 200, 200, 23 ); - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetDropHeight( 106 ); - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, L"Refresh Rate", 10, 225, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, 200, 225, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL, L"Back Buffer Format", 10, 260, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT, 200, 260, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL, L"Multisample Count", 10, 285, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT, 200, 285, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL, L"Multisample Quality", 10, 310, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY, 200, 310, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL - m_Dialog.AddStatic( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL, L"Vertical Sync", 10, 335, 180, 23 ); - m_Dialog.AddComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL, 200, 335, 300, 23 ); - - // DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE - m_Dialog.AddCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE, L"Create Debug Device", 200, 365, 180, 23 ); - - // DXUTSETTINGSDLG_OK, DXUTSETTINGSDLG_CANCEL - m_Dialog.AddButton( DXUTSETTINGSDLG_OK, L"OK", 230, 440, 73, 31 ); - m_Dialog.AddButton( DXUTSETTINGSDLG_CANCEL, L"Cancel", 315, 440, 73, 31, 0, true ); - - // Set up mode change dialog - m_RevertModeDialog.EnableKeyboardInput( true ); - m_RevertModeDialog.EnableNonUserEvents( true ); - m_RevertModeDialog.SetFont( 0, L"Arial", 15, FW_NORMAL ); - m_RevertModeDialog.SetFont( 1, L"Arial", 28, FW_BOLD ); - - pElement = m_RevertModeDialog.GetDefaultElement( DXUT_CONTROL_STATIC, 0 ); - if( pElement ) - { - pElement->dwTextFormat = DT_VCENTER | DT_RIGHT; - - // Title - CDXUTStatic* pStatic = NULL; - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC, L"Do you want to keep these display settings?", 10, 5, - 640, 50, false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 1; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - - // Timeout static text control - m_RevertModeDialog.AddStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT, L"", 10, 90, 640, 30, - false, &pStatic ); - pElement = pStatic->GetElement( 0 ); - pElement->iFont = 0; - pElement->dwTextFormat = DT_TOP | DT_LEFT; - } - - // DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, DXUTSETTINGSDLG_MODE_CHANGE_REVERT - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT, L"Yes", 230, 50, 73, 31 ); - m_RevertModeDialog.AddButton( DXUTSETTINGSDLG_MODE_CHANGE_REVERT, L"No", 315, 50, 73, 31, 0, true ); -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9CreateDevice( IDirect3DDevice9* pd3dDevice ) -{ - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -// Changes the UI defaults to the current device settings -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::Refresh() -{ - HRESULT hr = S_OK; - - g_DeviceSettings = DXUTGetDeviceSettings(); - - CDXUTComboBox* pAPIComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - pAPIComboBox->RemoveAllItems(); - if( DXUTDoesAppSupportD3D9() ) - { - // Ensure that at least one adapter got enumerated. - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D9_DEVICE ); - } - if( DXUTDoesAppSupportD3D11() && DXUTIsD3D11Available() ) - { - // Ensure that at least one adapter got enumerated. - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - if( pD3DEnum->GetAdapterInfoList()->GetSize() > 0 ) - AddAPIVersion( DXUT_D3D11_DEVICE ); - } - - // If no API has been added, something has gone wrong. Exit the dialog. - if( pAPIComboBox->GetNumItems() == 0 ) - { - SetActive( false ); - return S_OK; - } - - pAPIComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.ver ) ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Show all D3D9-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D9_DEVICE ); - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - - // Fill the UI with the current settings - AddDeviceType( g_DeviceSettings.d3d9.DeviceType ); - SetWindowed( FALSE != g_DeviceSettings.d3d9.pp.Windowed ); - SetDeviceClip( 0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - AddAdapterFormat( g_DeviceSettings.d3d9.AdapterFormat ); - AddResolution( g_DeviceSettings.d3d9.pp.BackBufferWidth, g_DeviceSettings.d3d9.pp.BackBufferHeight ); - AddRefreshRate( g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz ); - AddBackBufferFormat( g_DeviceSettings.d3d9.pp.BackBufferFormat ); - AddDepthStencilBufferFormat( g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ); - AddMultisampleType( g_DeviceSettings.d3d9.pp.MultiSampleType ); - AddMultisampleQuality( g_DeviceSettings.d3d9.pp.MultiSampleQuality ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - CD3D9EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d9.AdapterOrdinal, g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed != 0 ) ); - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - // Get the adapters list from CD3D9Enumeration object - CGrowableArray <CD3D9EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - case DXUT_D3D11_DEVICE: - { - // Show all D3D11-specific controls and hide controls for all other D3D versions. - ShowControlSet( DXUT_D3D11_DEVICE ); - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - // Fill the UI with the current settings - AddD3D11DeviceType( g_DeviceSettings.d3d11.DriverType ); - SetWindowed( FALSE != g_DeviceSettings.d3d11.sd.Windowed ); - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, g_DeviceSettings.d3d11.Output ); - - - - AddD3D11Resolution( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - AddD3D11RefreshRate( g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate ); - AddD3D11BackBufferFormat( g_DeviceSettings.d3d11.sd.BufferDesc.Format ); - AddD3D11MultisampleCount( g_DeviceSettings.d3d11.sd.SampleDesc.Count ); - AddD3D11MultisampleQuality( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ); - - CD3D11EnumDeviceSettingsCombo* pBestDeviceSettingsCombo = pD3DEnum->GetDeviceSettingsCombo( - g_DeviceSettings.d3d11.AdapterOrdinal, g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed != 0 ) ); - - if( NULL == pBestDeviceSettingsCombo ) - return DXUT_ERR_MSGBOX( L"GetDeviceSettingsCombo", E_INVALIDARG ); - - CDXUTComboBox *pFeatureLevelBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - pFeatureLevelBox->RemoveAllItems(); - for (int fli = 0; fli < TOTAL_FEATURE_LEVLES; fli++) { - if (m_Levels[fli] >= g_DeviceSettings.MinimumFeatureLevel - && m_Levels[fli] <=pBestDeviceSettingsCombo->pDeviceInfo->MaxLevel) { - AddD3D11FeatureLevel( m_Levels[fli] ); - } - } - pFeatureLevelBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DeviceFeatureLevel ) ); - - - // Get the adapters list from CD3D11Enumeration object - CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - if( pAdapterInfoList->GetSize() == 0 ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", DXUTERR_NOCOMPATIBLEDEVICES ); - - CDXUTComboBox* pAdapterCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterCombo->RemoveAllItems(); - - // Add adapters - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); iAdapter++ ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - hr = OnAPIVersionChanged( true ); - if( FAILED( hr ) ) - return hr; - - //m_Dialog.Refresh(); - CDXUTDialog::SetRefreshTime( ( float )DXUTGetTime() ); - break; - } - } - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D9ResetDevice() -{ - const D3DSURFACE_DESC* pDesc = DXUTGetD3D9BackBufferSurfaceDesc(); - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pDesc->Width, pDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pDesc->Width, pDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - pd3dDevice->BeginStateBlock(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - pd3dDevice->EndStateBlock( &m_pStateBlock ); - - return S_OK; -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetSelectedD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRate = ( DXGI_RATIONAL* )pRefreshRateComboBox->GetItemData( i ); - - if( pRate && pRate->Numerator == RefreshRate.Numerator && pRate->Denominator == RefreshRate.Denominator ) - { - pRefreshRateComboBox->SetSelectedByIndex( i ); - return; - } - } -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender( float fElapsedTime ) -{ - if( DXUTGetD3D11Device() ) - OnRender11( fElapsedTime ); - else - OnRender9( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender9( float fElapsedTime ) -{ - IDirect3DDevice9* pd3dDevice = DXUTGetD3D9Device(); - - // Clear the render target and the zbuffer - pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, 0x00003F3F, 1.0f, 0 ); - - // Render the scene - if( SUCCEEDED( pd3dDevice->BeginScene() ) ) - { - m_pStateBlock->Capture(); - pd3dDevice->SetRenderState( D3DRS_FILLMODE, D3DFILL_SOLID ); - m_pActiveDialog->OnRender( fElapsedTime ); - m_pStateBlock->Apply(); - pd3dDevice->EndScene(); - } -} - - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnRender11( float fElapsedTime ) -{ - // Render the scene - m_pActiveDialog->OnRender( fElapsedTime ); -} - - -//-------------------------------------------------------------------------------------- -LRESULT CD3DSettingsDlg::MsgProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) -{ - m_pActiveDialog->MsgProc( hWnd, uMsg, wParam, lParam ); - if( uMsg == WM_KEYDOWN && wParam == VK_F2 ) - SetActive( false ); - return 0; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9LostDevice() -{ - SAFE_RELEASE( m_pStateBlock ); -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D9DestroyDevice() -{ -} - - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11CreateDevice( ID3D11Device* pd3dDevice ) -{ - //HRESULT hr; - - if( pd3dDevice == NULL ) - return DXUT_ERR_MSGBOX( L"CD3DSettingsDlg::OnCreatedDevice", E_INVALIDARG ); - - // Create the fonts/textures - m_Dialog.SetCallback( StaticOnEvent, ( void* )this ); - m_RevertModeDialog.SetCallback( StaticOnEvent, ( void* )this ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnD3D11ResizedSwapChain( ID3D11Device* pd3dDevice, - const DXGI_SURFACE_DESC* pBackBufferSurfaceDesc ) -{ - m_Dialog.SetLocation( 0, 0 ); - m_Dialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_Dialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - m_RevertModeDialog.SetLocation( 0, 0 ); - m_RevertModeDialog.SetSize( pBackBufferSurfaceDesc->Width, pBackBufferSurfaceDesc->Height ); - m_RevertModeDialog.SetBackgroundColors( D3DCOLOR_ARGB( 255, 98, 138, 206 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 54, 105, 192 ), - D3DCOLOR_ARGB( 255, 10, 73, 179 ) ); - - return S_OK; -} - - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnD3D11DestroyDevice() -{ - - -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::ShowControlSet( DXUTDeviceVersion ver ) -{ - switch( ver ) - { - case DXUT_D3D9_DEVICE: - - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( true ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( false ); - - break; - - case DXUT_D3D11_DEVICE: - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_RESOLUTION_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_REFRESH_RATE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEPTH_STENCIL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_TYPE_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_VERTEX_PROCESSING_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_PRESENT_INTERVAL_LABEL )->SetVisible( false ); - m_Dialog.GetControl( DXUTSETTINGSDLG_DEVICECLIP )->SetVisible( false ); - - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL_LABEL )->SetVisible( true ); - m_Dialog.GetControl( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE )->SetVisible( true ); - break; - } -} - - -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl, void* pUserData ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserData; - if( pD3DSettings ) - pD3DSettings->OnEvent( nEvent, nControlID, pControl ); -} - -//-------------------------------------------------------------------------------------- -// Name: CD3DSettingsDlg::StaticOnModeChangeTimer() -// Desc: Timer callback registered by a call to DXUTSetTimer. It is called each second -// until mode change timeout limit. -//-------------------------------------------------------------------------------------- -void WINAPI CD3DSettingsDlg::StaticOnModeChangeTimer( UINT nIDEvent, void* pUserContext ) -{ - CD3DSettingsDlg* pD3DSettings = ( CD3DSettingsDlg* )pUserContext; - assert( pD3DSettings ); - assert( pD3DSettings->m_pActiveDialog == &pD3DSettings->m_RevertModeDialog ); - assert( pD3DSettings->m_nIDEvent == nIDEvent ); - - if( 0 == --pD3DSettings->m_nRevertModeTimeout ) - { - CDXUTControl* pControl = pD3DSettings->m_RevertModeDialog.GetControl( DXUTSETTINGSDLG_MODE_CHANGE_REVERT ); - assert( pControl ); - pD3DSettings->m_RevertModeDialog.SendEvent( EVENT_BUTTON_CLICKED, false, pControl ); - } - pD3DSettings->UpdateModeChangeTimeoutText( pD3DSettings->m_nRevertModeTimeout ); -} - -//-------------------------------------------------------------------------------------- -void CD3DSettingsDlg::OnEvent( UINT nEvent, int nControlID, - CDXUTControl* pControl ) -{ - switch( nControlID ) - { - case DXUTSETTINGSDLG_ADAPTER: - OnAdapterChanged(); break; - case DXUTSETTINGSDLG_DEVICE_TYPE: - OnDeviceTypeChanged(); break; - case DXUTSETTINGSDLG_WINDOWED: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_FULLSCREEN: - OnWindowedFullScreenChanged(); break; - case DXUTSETTINGSDLG_ADAPTER_FORMAT: - OnAdapterFormatChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL: - { - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - OnAdapterFormatChanged(); - } - else - { - OnBackBufferFormatChanged(); - } - break; - } - case DXUTSETTINGSDLG_D3D11_RESOLUTION: - OnD3D11ResolutionChanged(); break; - case DXUTSETTINGSDLG_RESOLUTION: - OnResolutionChanged(); break; - case DXUTSETTINGSDLG_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_DEPTH_STENCIL: - OnDepthStencilBufferFormatChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_TYPE: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_VERTEX_PROCESSING: - OnVertexProcessingChanged(); break; - case DXUTSETTINGSDLG_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_DEVICECLIP: - OnDeviceClipChanged(); break; - case DXUTSETTINGSDLG_API_VERSION: - OnAPIVersionChanged(); break; - case DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL: - OnFeatureLevelChanged(); break; - case DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT: - OnAdapterOutputChanged(); break; - case DXUTSETTINGSDLG_D3D11_REFRESH_RATE: - OnRefreshRateChanged(); break; - case DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT: - OnBackBufferFormatChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT: - OnMultisampleTypeChanged(); break; - case DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY: - OnMultisampleQualityChanged(); break; - case DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL: - OnPresentIntervalChanged(); break; - case DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE: - OnDebugDeviceChanged(); break; - - case DXUTSETTINGSDLG_OK: - { - bool bFullScreenModeChange = false; - DXUTDeviceSettings currentSettings = DXUTGetDeviceSettings(); - g_DeviceSettings.MinimumFeatureLevel = currentSettings.MinimumFeatureLevel; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWindowWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d9.pp.BackBufferWidth != - currentSettings.d3d9.pp.BackBufferWidth || - g_DeviceSettings.d3d9.pp.BackBufferHeight != currentSettings.d3d9.pp.BackBufferHeight || - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz != - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - } - - if( g_DeviceSettings.d3d9.pp.MultiSampleType != D3DMULTISAMPLE_NONE ) - { - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_LOCKABLE_BACKBUFFER; - } - } - else // D3D11 - { - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = 0; - - RECT rcClient; - if( DXUTIsWindowed() ) - GetClientRect( DXUTGetHWND(), &rcClient ); - else - rcClient = DXUTGetWindowClientRectAtModeChange(); - DWORD dwWindowWidth = rcClient.right - rcClient.left; - DWORD dwWindowHeight = rcClient.bottom - rcClient.top; - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = dwWindowWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwWindowHeight; - } - else - { - // Check for fullscreen mode change - bFullScreenModeChange = g_DeviceSettings.d3d11.sd.BufferDesc.Width != - currentSettings.d3d11.sd.BufferDesc.Width || - g_DeviceSettings.d3d11.sd.BufferDesc.Height != currentSettings.d3d11.sd.BufferDesc.Height || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator || - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator != - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - } - } - - if( bFullScreenModeChange ) - { - // set appropriate global device settings to that of the current device - // settings. These will get set to the user-defined settings once the - // user accepts the mode change - DXUTDeviceSettings tSettings = g_DeviceSettings; - if( g_DeviceSettings.ver == DXUT_D3D9_DEVICE ) - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = - currentSettings.d3d9.pp.BackBufferWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = - currentSettings.d3d9.pp.BackBufferHeight; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = - currentSettings.d3d9.pp.FullScreen_RefreshRateInHz; - g_DeviceSettings.d3d9.pp.Windowed = - currentSettings.d3d9.pp.Windowed; - } - else - { - - g_DeviceSettings.d3d11.sd.BufferDesc.Width = - currentSettings.d3d11.sd.BufferDesc.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = - currentSettings.d3d11.sd.BufferDesc.Height; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Denominator; - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator = - currentSettings.d3d11.sd.BufferDesc.RefreshRate.Numerator; - g_DeviceSettings.d3d11.sd.Windowed = currentSettings.d3d11.sd.Windowed; - - } - - // apply the user-defined settings - DXUTCreateDeviceFromSettings( &tSettings ); - // create the mode change timeout dialog - m_pActiveDialog = &m_RevertModeDialog; - m_nRevertModeTimeout = 15; - UpdateModeChangeTimeoutText( m_nRevertModeTimeout ); - // activate a timer for 1-second updates - DXUTSetTimer( StaticOnModeChangeTimer, 1.0f, &m_nIDEvent, ( void* )this ); - } - else - { - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - SetActive( false ); - } - break; - } - - case DXUTSETTINGSDLG_CANCEL: - { - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_ACCEPT: - { - DXUTKillTimer( m_nIDEvent ); - g_DeviceSettings = DXUTGetDeviceSettings(); - m_pActiveDialog = &m_Dialog; - SetActive( false ); - break; - } - - case DXUTSETTINGSDLG_MODE_CHANGE_REVERT: - { - DXUTKillTimer( m_nIDEvent ); - m_pActiveDialog = &m_Dialog; - m_nIDEvent = 0; - m_nRevertModeTimeout = 0; - DXUTCreateDeviceFromSettings( &g_DeviceSettings ); - Refresh(); - break; - } - } -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::SetDeviceSettingsFromUI() -{ - CDXUTComboBox* pComboBox; - CDXUTRadioButton* pRadioButton; - - // DXUTSETTINGSDLG_DEVICE_TYPE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - g_DeviceSettings.d3d9.DeviceType = ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_WINDOWED - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - g_DeviceSettings.d3d9.pp.Windowed = pRadioButton->GetChecked(); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - g_DeviceSettings.d3d9.AdapterFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = D3DFMT_UNKNOWN; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = 0; - } - else - { - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - g_DeviceSettings.d3d9.pp.BackBufferFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - // DXUTSETTINGSDLG_RESOLUTION - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = HIWORD( dwResolution ); - g_DeviceSettings.d3d9.pp.BackBufferHeight = LOWORD( dwResolution ); - - // DXUTSETTINGSDLG_REFRESH_RATE - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = PtrToUlong( pComboBox->GetSelectedData() ); - } - - // DXUTSETTINGSDLG_DEPTH_STENCIL - pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumAdapterInfo* CD3DSettingsDlg::GetCurrentAdapterInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d9.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceInfo* CD3DSettingsDlg::GetCurrentDeviceInfo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumAdapterInfo* CD3DSettingsDlg::GetCurrentD3D11AdapterInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceInfo* CD3DSettingsDlg::GetCurrentD3D11DeviceInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType ); -} - - -//------------------------------------------------------------------------------------- -CD3D11EnumOutputInfo* CD3DSettingsDlg::GetCurrentD3D11OutputInfo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetOutputInfo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output ); -} - - -//------------------------------------------------------------------------------------- -CD3D9EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentDeviceSettingsCombo() -{ - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d9.AdapterOrdinal, - g_DeviceSettings.d3d9.DeviceType, - g_DeviceSettings.d3d9.AdapterFormat, - g_DeviceSettings.d3d9.pp.BackBufferFormat, - ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) ); -} - -//------------------------------------------------------------------------------------- -CD3D11EnumDeviceSettingsCombo* CD3DSettingsDlg::GetCurrentD3D11DeviceSettingsCombo() -{ - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - return pD3DEnum->GetDeviceSettingsCombo( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.DriverType, - g_DeviceSettings.d3d11.Output, - g_DeviceSettings.d3d11.sd.BufferDesc.Format, - ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) ); -} - -HRESULT CD3DSettingsDlg::OnD3D11ResolutionChanged () { - DWORD dwWidth, dwHeight; - GetSelectedD3D11Resolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d11.sd.BufferDesc.Width= dwWidth; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = dwHeight; - - return S_OK; -} - -HRESULT CD3DSettingsDlg::OnFeatureLevelChanged () { - HRESULT hr = E_FAIL; - if (g_DeviceSettings.ver == DXUT_D3D11_DEVICE) { - if (g_DeviceSettings.d3d11.DeviceFeatureLevel == GetSelectedFeatureLevel()) return S_OK; - //if( !bRefresh ) - //{ - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - //g_DeviceSettings.d3d11.fl = GetSelectedFeatureLevel(); - hr = DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true, GetSelectedFeatureLevel()); - - //} - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - } - - return hr; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAPIVersionChanged( bool bRefresh ) -{ - HRESULT hr; - - // Store the API version - g_DeviceSettings.ver = GetSelectedAPIVersion(); - - // Show/hide appropriate dialog controls based on version. - ShowControlSet( g_DeviceSettings.ver ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D9 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D9_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice ( &g_DeviceSettings, true); - } - - CD3D9Enumeration* pD3DEnum = DXUTGetD3D9Enumeration(); - CGrowableArray <CD3D9EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D9EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.AdapterOrdinal ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - if( !bRefresh ) - { - // Obtain a set of valid D3D10 device settings. - UINT CreateFlags = g_DeviceSettings.d3d11.CreateFlags; - ZeroMemory( &g_DeviceSettings, sizeof( g_DeviceSettings ) ); - // We want a specific API version, so set up match option to preserve it. - DXUTApplyDefaultDeviceSettings(&g_DeviceSettings); - g_DeviceSettings.d3d11.CreateFlags = CreateFlags; - g_DeviceSettings.ver = DXUT_D3D11_DEVICE; - DXUTSnapDeviceSettingsToEnumDevice(&g_DeviceSettings, true); - - } - - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - CGrowableArray <CD3D11EnumAdapterInfo*>* pAdapterInfoList = pD3DEnum->GetAdapterInfoList(); - - CDXUTComboBox* pAdapterComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - pAdapterComboBox->RemoveAllItems(); - - for( int iAdapter = 0; iAdapter < pAdapterInfoList->GetSize(); ++iAdapter ) - { - CD3D11EnumAdapterInfo* pAdapterInfo = pAdapterInfoList->GetAt( iAdapter ); - AddAdapter( pAdapterInfo->szUniqueDescription, pAdapterInfo->AdapterOrdinal ); - } - - pAdapterComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.AdapterOrdinal ) ); - - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - pCheckBox->SetChecked( 0 != ( g_DeviceSettings.d3d11.CreateFlags & D3D11_CREATE_DEVICE_DEBUG ) ); - - hr = OnAdapterChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d9.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D9EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddDeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.DeviceType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - // Store the adapter index - g_DeviceSettings.d3d11.AdapterOrdinal = GetSelectedAdapter(); - - // DXUTSETTINGSDLG_DEVICE_TYPE - CDXUTComboBox* pDeviceTypeComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - pDeviceTypeComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int iDeviceInfo = 0; iDeviceInfo < pAdapterInfo->deviceInfoList.GetSize(); iDeviceInfo++ ) - { - CD3D11EnumDeviceInfo* pDeviceInfo = pAdapterInfo->deviceInfoList.GetAt( iDeviceInfo ); - AddD3D11DeviceType( pDeviceInfo->DeviceType ); - } - - pDeviceTypeComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.DriverType ) ); - - hr = OnDeviceTypeChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.DeviceType = GetSelectedDeviceType(); - - // Update windowed/full screen radio buttons - bool bHasWindowedDeviceCombo = false; - bool bHasFullScreenDeviceCombo = false; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceSettingsCombo->Windowed ) - bHasWindowedDeviceCombo = true; - else - bHasFullScreenDeviceCombo = true; - } - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, bHasWindowedDeviceCombo ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, bHasFullScreenDeviceCombo ); - - SetWindowed( g_DeviceSettings.d3d9.pp.Windowed && bHasWindowedDeviceCombo ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.DriverType = GetSelectedD3D11DeviceType(); - - // DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, true ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, true ); - - SetWindowed( g_DeviceSettings.d3d11.sd.Windowed != 0 ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnWindowedFullScreenChanged() -{ - HRESULT hr = S_OK; - bool bWindowed = IsWindowed(); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION_LABEL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE_LABEL, !bWindowed ); - - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_ADAPTER_FORMAT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_REFRESH_RATE, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_DEVICECLIP, bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_RESOLUTION, !bWindowed ); - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D11_REFRESH_RATE, !bWindowed ); - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.Windowed = bWindowed; - bool bDeviceClip = ( 0x0 != ( g_DeviceSettings.d3d9.pp.Flags & D3DPRESENTFLAG_DEVICECLIP ) ); - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - IDirect3D9* pD3D = DXUTGetD3D9Object(); - if( pD3D == NULL ) - return DXTRACE_ERR( L"DXUTGetD3DObject", E_FAIL ); - - D3DDISPLAYMODE mode; - hr = pD3D->GetAdapterDisplayMode( g_DeviceSettings.d3d9.AdapterOrdinal, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetAdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d9.pp.BackBufferWidth = mode.Width; - g_DeviceSettings.d3d9.pp.BackBufferHeight = mode.Height; - } - else - { - g_DeviceSettings.d3d9.pp.BackBufferWidth = rc.right; - g_DeviceSettings.d3d9.pp.BackBufferHeight = rc.bottom; - } - - g_DeviceSettings.d3d9.AdapterFormat = mode.Format; - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = mode.RefreshRate; - } - - const D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - const DWORD dwWidth = g_DeviceSettings.d3d9.pp.BackBufferWidth; - const DWORD dwHeight = g_DeviceSettings.d3d9.pp.BackBufferHeight; - const DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // DXUTSETTINGSDLG_DEVICECLIP - SetDeviceClip( bDeviceClip ); - - // DXUTSETTINGSDLG_ADAPTER_FORMAT - CDXUTComboBox* pAdapterFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - if( pAdapterFormatComboBox == NULL ) - return E_FAIL; - pAdapterFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - if( bWindowed ) - { - AddAdapterFormat( adapterFormat ); - } - else - { - for( int iSettingsCombo = 0; iSettingsCombo < pDeviceInfo->deviceSettingsComboList.GetSize(); - iSettingsCombo++ ) - { - CD3D9EnumDeviceSettingsCombo* pSettingsCombo = pDeviceInfo->deviceSettingsComboList.GetAt( - iSettingsCombo ); - AddAdapterFormat( pSettingsCombo->AdapterFormat ); - } - } - - pAdapterFormatComboBox->SetSelectedByData( ULongToPtr( adapterFormat ) ); - - hr = OnAdapterFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddResolution( dwWidth, dwHeight ); - } - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_REFRESH_RATE - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - if( bWindowed ) - { - pRefreshRateComboBox->RemoveAllItems(); - AddRefreshRate( dwRefreshRate ); - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // Get available adapter output - CD3D11Enumeration* pD3DEnum = DXUTGetD3D11Enumeration(); - - CDXUTComboBox* pOutputComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - pOutputComboBox->RemoveAllItems(); - - CD3D11EnumAdapterInfo* pAdapterInfo = pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d11.AdapterOrdinal ); - for( int ioutput = 0; ioutput < pAdapterInfo->outputInfoList.GetSize(); ++ioutput ) - { - CD3D11EnumOutputInfo* pOutputInfo = pAdapterInfo->outputInfoList.GetAt( ioutput ); - AddD3D11AdapterOutput( pOutputInfo->Desc.DeviceName, pOutputInfo->Output ); - } - - pOutputComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.Output ) ); - - hr = OnAdapterOutputChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterOutputChanged() -{ - HRESULT hr; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D11_DEVICE: - { - bool bWindowed = IsWindowed(); - g_DeviceSettings.d3d11.sd.Windowed = bWindowed; - - // If windowed, get the appropriate adapter format from Direct3D - if( g_DeviceSettings.d3d11.sd.Windowed ) - { - DXGI_MODE_DESC mode; - hr = DXUTGetD3D11AdapterDisplayMode( g_DeviceSettings.d3d11.AdapterOrdinal, - g_DeviceSettings.d3d11.Output, &mode ); - if( FAILED( hr ) ) - return DXTRACE_ERR( L"GetD3D11AdapterDisplayMode", hr ); - - // Default resolution to the fullscreen res that was last used - RECT rc = DXUTGetFullsceenClientRectAtModeChange(); - if( rc.right == 0 || rc.bottom == 0 ) - { - // If nothing last used, then default to the adapter desktop res - g_DeviceSettings.d3d11.sd.BufferDesc.Width = mode.Width; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = mode.Height; - } - else - { - g_DeviceSettings.d3d11.sd.BufferDesc.Width = rc.right; - g_DeviceSettings.d3d11.sd.BufferDesc.Height = rc.bottom; - } - - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = mode.RefreshRate; - } - - const DXGI_RATIONAL RefreshRate = g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT - ); - pBackBufferFormatComboBox->RemoveAllItems(); - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - if( ( pDeviceCombo->Windowed == TRUE ) == bWindowed ) - { - AddD3D11BackBufferFormat( pDeviceCombo->BackBufferFormat ); - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.BufferDesc.Format ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_D3D11_REFRESH_RATE - if( bWindowed ) - { - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i ) - { - DXGI_RATIONAL* pRefreshRate = reinterpret_cast<DXGI_RATIONAL*>( - pRefreshRateComboBox->GetItemData( i ) ); - delete pRefreshRate; - } - pRefreshRateComboBox->RemoveAllItems(); - AddD3D11RefreshRate( RefreshRate ); - } - - SetSelectedD3D11RefreshRate( RefreshRate ); - break; - } - }; - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnAdapterFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - // DXUTSETTINGSDLG_ADAPTER_FORMAT - D3DFORMAT adapterFormat = GetSelectedAdapterFormat(); - g_DeviceSettings.d3d9.AdapterFormat = adapterFormat; - - // DXUTSETTINGSDLG_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - D3DDISPLAYMODE dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d9.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE DisplayMode = pAdapterInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d9.AdapterFormat ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddResolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d9.pp.BackBufferWidth, - g_DeviceSettings.d3d9.pp.BackBufferHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - hr = OnResolutionChanged(); - if( FAILED( hr ) ) - return hr; - - // DXUTSETTINGSDLG_BACK_BUFFER_FORMAT - CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - pBackBufferFormatComboBox->RemoveAllItems(); - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - const BOOL bWindowed = IsWindowed(); - bool bHasWindowedBackBuffer = false; - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - if( pDeviceCombo->Windowed == bWindowed && - pDeviceCombo->AdapterFormat == g_DeviceSettings.d3d9.AdapterFormat ) - { - AddBackBufferFormat( pDeviceCombo->BackBufferFormat ); - bHasWindowedBackBuffer = true; - } - } - - pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.BackBufferFormat ) ); - - hr = OnBackBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - if( !bHasWindowedBackBuffer ) - { - m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false ); - - if( g_DeviceSettings.d3d9.pp.Windowed ) - { - SetWindowed( false ); - - hr = OnWindowedFullScreenChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnResolutionChanged() -{ - HRESULT hr = S_OK; - - CD3D9EnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - // Set resolution - DWORD dwWidth, dwHeight; - GetSelectedResolution( &dwWidth, &dwHeight ); - g_DeviceSettings.d3d9.pp.BackBufferWidth = dwWidth; - g_DeviceSettings.d3d9.pp.BackBufferHeight = dwHeight; - - DWORD dwRefreshRate = g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz; - - // Update the refresh rate list - CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - pRefreshRateComboBox->RemoveAllItems(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - for( int idm = 0; idm < pAdapterInfo->displayModeList.GetSize(); idm++ ) - { - D3DDISPLAYMODE displayMode = pAdapterInfo->displayModeList.GetAt( idm ); - - if( displayMode.Format == adapterFormat && - displayMode.Width == dwWidth && - displayMode.Height == dwHeight ) - { - AddRefreshRate( displayMode.RefreshRate ); - } - } - - pRefreshRateComboBox->SetSelectedByData( ULongToPtr( dwRefreshRate ) ); - - hr = OnRefreshRateChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnRefreshRateChanged() -{ - // Set refresh rate - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.BufferDesc.RefreshRate = GetSelectedD3D11RefreshRate(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - g_DeviceSettings.d3d9.pp.BackBufferFormat = GetSelectedBackBufferFormat(); - - D3DFORMAT adapterFormat = g_DeviceSettings.d3d9.AdapterFormat; - D3DFORMAT backBufferFormat = g_DeviceSettings.d3d9.pp.BackBufferFormat; - - CD3D9EnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo(); - if( pDeviceInfo == NULL ) - return E_FAIL; - - bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP; - DXUTGetD3D9Enumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP, - &bAllowPureHardwareVP, &bAllowMixedVP ); - - for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D9EnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d9.pp.Windowed == TRUE ) && - pDeviceCombo->AdapterFormat == adapterFormat && - pDeviceCombo->BackBufferFormat == backBufferFormat ) - { - CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - pDepthStencilComboBox->RemoveAllItems(); - pDepthStencilComboBox->SetEnabled( ( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil == TRUE ) ); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - { - for( int ifmt = 0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ ) - { - D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt ); - - AddDepthStencilBufferFormat( fmt ); - } - - pDepthStencilComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat ) ); - } - else - { - if( !pDepthStencilComboBox->ContainsItem( L"(not used)" ) ) - pDepthStencilComboBox->AddItem( L"(not used)", NULL ); - } - - hr = OnDepthStencilBufferFormatChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pVertexProcessingComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - pVertexProcessingComboBox->RemoveAllItems(); - - // Add valid vertex processing types - if( bAllowSoftwareVP ) - AddVertexProcessingType( D3DCREATE_SOFTWARE_VERTEXPROCESSING ); - - if( bAllowHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_HARDWARE_VERTEXPROCESSING ); - - if( bAllowPureHardwareVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_PUREDEVICE ) - AddVertexProcessingType( D3DCREATE_PUREDEVICE ); - - if( bAllowMixedVP && pDeviceInfo->Caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT ) - AddVertexProcessingType( D3DCREATE_MIXED_VERTEXPROCESSING ); - - if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_PUREDEVICE ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_PUREDEVICE ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_SOFTWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( - D3DCREATE_HARDWARE_VERTEXPROCESSING ) ); - else if( g_DeviceSettings.d3d9.BehaviorFlags & D3DCREATE_MIXED_VERTEXPROCESSING ) - pVertexProcessingComboBox->SetSelectedByData( ULongToPtr( D3DCREATE_MIXED_VERTEXPROCESSING ) ); - - hr = OnVertexProcessingChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( D3DPRESENT_INTERVAL_DEFAULT ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( D3DPRESENT_INTERVAL_IMMEDIATE ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d9.pp.PresentationInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - - case DXUT_D3D11_DEVICE: - { - g_DeviceSettings.d3d11.sd.BufferDesc.Format = GetSelectedD3D11BackBufferFormat(); - - DXGI_FORMAT backBufferFormat = g_DeviceSettings.d3d11.sd.BufferDesc.Format; - - CD3D11EnumAdapterInfo* pAdapterInfo = GetCurrentD3D11AdapterInfo(); - if( pAdapterInfo == NULL ) - return E_FAIL; - - for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ ) - { - CD3D11EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc ); - - if( pDeviceCombo->Windowed == ( g_DeviceSettings.d3d11.sd.Windowed == TRUE ) && - pDeviceCombo->BackBufferFormat == backBufferFormat && - pDeviceCombo->DeviceType == g_DeviceSettings.d3d11.DriverType ) - { - CDXUTComboBox* pMultisampleCountCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT - ); - pMultisampleCountCombo->RemoveAllItems(); - for( int i = 0; i < pDeviceCombo->multiSampleCountList.GetSize(); ++i ) - AddD3D11MultisampleCount( pDeviceCombo->multiSampleCountList.GetAt( i ) ); - pMultisampleCountCombo->SetSelectedByData( ULongToPtr( - g_DeviceSettings.d3d11.sd.SampleDesc.Count ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - CDXUTComboBox* pPresentIntervalComboBox = - m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - pPresentIntervalComboBox->RemoveAllItems(); - pPresentIntervalComboBox->AddItem( L"On", ULongToPtr( 1 ) ); - pPresentIntervalComboBox->AddItem( L"Off", ULongToPtr( 0 ) ); - - pPresentIntervalComboBox->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.SyncInterval ) ); - - hr = OnPresentIntervalChanged(); - if( FAILED( hr ) ) - return hr; - - hr = UpdateD3D11Resolutions(); - if( FAILED( hr ) ) - return hr; - } - } - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged() -{ - HRESULT hr = S_OK; - - D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat(); - - if( g_DeviceSettings.d3d9.pp.EnableAutoDepthStencil ) - g_DeviceSettings.d3d9.pp.AutoDepthStencilFormat = depthStencilBufferFormat; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - CDXUTComboBox* pMultisampleTypeCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleTypeCombo->RemoveAllItems(); - - for( int ims = 0; ims < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); ims++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( ims ); - - bool bConflictFound = false; - for( int iConf = 0; iConf < pDeviceSettingsCombo->DSMSConflictList.GetSize(); iConf++ ) - { - CD3D9EnumDSMSConflict DSMSConf = pDeviceSettingsCombo->DSMSConflictList.GetAt( iConf ); - if( DSMSConf.DSFormat == depthStencilBufferFormat && - DSMSConf.MSType == msType ) - { - bConflictFound = true; - break; - } - } - - if( !bConflictFound ) - AddMultisampleType( msType ); - } - - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleType ) ); - - hr = OnMultisampleTypeChanged(); - if( FAILED( hr ) ) - return hr; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged() -{ - HRESULT hr = S_OK; - - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - { - D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType(); - g_DeviceSettings.d3d9.pp.MultiSampleType = multisampleType; - - CD3D9EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentDeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - DWORD dwMaxQuality = 0; - for( int iType = 0; iType < pDeviceSettingsCombo->multiSampleTypeList.GetSize(); iType++ ) - { - D3DMULTISAMPLE_TYPE msType = pDeviceSettingsCombo->multiSampleTypeList.GetAt( iType ); - if( msType == multisampleType ) - { - dwMaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iType ); - break; - } - } - - // DXUTSETTINGSDLG_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < dwMaxQuality; iQuality++ ) - { - AddMultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d9.pp.MultiSampleQuality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - case DXUT_D3D11_DEVICE: - { - UINT multisampleCount = GetSelectedD3D11MultisampleCount(); - g_DeviceSettings.d3d11.sd.SampleDesc.Count = multisampleCount; - - CD3D11EnumDeviceSettingsCombo* pDeviceSettingsCombo = GetCurrentD3D11DeviceSettingsCombo(); - if( pDeviceSettingsCombo == NULL ) - return E_FAIL; - - UINT MaxQuality = 0; - for( int iCount = 0; iCount < pDeviceSettingsCombo->multiSampleCountList.GetSize(); iCount++ ) - { - UINT Count = pDeviceSettingsCombo->multiSampleCountList.GetAt( iCount ); - if( Count == multisampleCount ) - { - MaxQuality = pDeviceSettingsCombo->multiSampleQualityList.GetAt( iCount ); - break; - } - } - - // DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - CDXUTComboBox* pMultisampleQualityCombo = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY - ); - pMultisampleQualityCombo->RemoveAllItems(); - - for( UINT iQuality = 0; iQuality < MaxQuality; iQuality++ ) - { - AddD3D11MultisampleQuality( iQuality ); - } - - pMultisampleQualityCombo->SetSelectedByData( ULongToPtr( g_DeviceSettings.d3d11.sd.SampleDesc.Quality ) ); - - hr = OnMultisampleQualityChanged(); - if( FAILED( hr ) ) - return hr; - - break; - } - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.MultiSampleQuality = GetSelectedMultisampleQuality(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.sd.SampleDesc.Quality = GetSelectedD3D11MultisampleQuality(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnVertexProcessingChanged() -{ - DWORD dwBehavior = g_DeviceSettings.d3d9.BehaviorFlags; - - // Clear vertex processing flags - dwBehavior &= ~D3DCREATE_HARDWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_SOFTWARE_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_MIXED_VERTEXPROCESSING; - dwBehavior &= ~D3DCREATE_PUREDEVICE; - - // Determine new flags - DWORD dwNewFlags = GetSelectedVertexProcessingType(); - if( dwNewFlags & D3DCREATE_PUREDEVICE ) - dwNewFlags |= D3DCREATE_HARDWARE_VERTEXPROCESSING; - - // Make changes - g_DeviceSettings.d3d9.BehaviorFlags = dwBehavior | dwNewFlags; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnPresentIntervalChanged() -{ - switch( g_DeviceSettings.ver ) - { - case DXUT_D3D9_DEVICE: - g_DeviceSettings.d3d9.pp.PresentationInterval = GetSelectedPresentInterval(); - break; - - case DXUT_D3D11_DEVICE: - g_DeviceSettings.d3d11.SyncInterval = GetSelectedD3D11PresentInterval(); - break; - } - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDebugDeviceChanged() -{ - bool bDebugDevice = GetSelectedDebugDeviceValue(); - - if( bDebugDevice ) - g_DeviceSettings.d3d11.CreateFlags |= D3D11_CREATE_DEVICE_DEBUG; - else - g_DeviceSettings.d3d11.CreateFlags &= ~D3D11_CREATE_DEVICE_DEBUG; - - return S_OK; -} - -//------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::OnDeviceClipChanged() -{ - if( IsDeviceClip() ) - g_DeviceSettings.d3d9.pp.Flags |= D3DPRESENTFLAG_DEVICECLIP; - else - g_DeviceSettings.d3d9.pp.Flags &= ~D3DPRESENTFLAG_DEVICECLIP; - - return S_OK; -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAPIVersion( DXUTDeviceVersion version ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - if( !pComboBox->ContainsItem( DXUTAPIVersionToString( version ) ) ) - pComboBox->AddItem( DXUTAPIVersionToString( version ), ULongToPtr( version ) ); -} - - -//------------------------------------------------------------------------------------- -DXUTDeviceVersion CD3DSettingsDlg::GetSelectedAPIVersion() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_API_VERSION ); - - return ( DXUTDeviceVersion )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapter( const WCHAR* strDescription, UINT iAdapter ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - if( !pComboBox->ContainsItem( strDescription ) ) - pComboBox->AddItem( strDescription, ULongToPtr( iAdapter ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedAdapter() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDeviceType( D3DDEVTYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DDeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DDeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3DDEVTYPE CD3DSettingsDlg::GetSelectedDeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3DDEVTYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetWindowed( bool bWindowed ) -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - pRadioButton->SetChecked( bWindowed ); - - pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_FULLSCREEN ); - pRadioButton->SetChecked( !bWindowed ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsWindowed() -{ - CDXUTRadioButton* pRadioButton = m_Dialog.GetRadioButton( DXUTSETTINGSDLG_WINDOWED ); - return pRadioButton->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddAdapterFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedAdapterFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_ADAPTER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11AdapterOutput( const WCHAR* strName, UINT Output ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - if( !pComboBox->ContainsItem( strName ) ) - pComboBox->AddItem( strName, ULongToPtr( Output ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11AdapterOutput() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_ADAPTER_OUTPUT ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddResolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedResolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11Resolution( DWORD dwWidth, DWORD dwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolutionData; - WCHAR strResolution[50]; - dwResolutionData = MAKELONG( dwWidth, dwHeight ); - swprintf_s( strResolution, 50, L"%d by %d", dwWidth, dwHeight ); - - if( !pComboBox->ContainsItem( strResolution ) ) - pComboBox->AddItem( strResolution, ULongToPtr( dwResolutionData ) ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::GetSelectedD3D11Resolution( DWORD* pdwWidth, DWORD* pdwHeight ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - - DWORD dwResolution = PtrToUlong( pComboBox->GetSelectedData() ); - - *pdwWidth = LOWORD( dwResolution ); - *pdwHeight = HIWORD( dwResolution ); -} - -void CD3DSettingsDlg::AddD3D11FeatureLevel(D3D_FEATURE_LEVEL fl) { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - switch( fl ) - { - case D3D_FEATURE_LEVEL_9_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_1", ULongToPtr( D3D_FEATURE_LEVEL_9_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_2: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_2" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_2", ULongToPtr( D3D_FEATURE_LEVEL_9_2 ) ); - } - break; - case D3D_FEATURE_LEVEL_9_3: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_9_3" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_9_3", ULongToPtr( D3D_FEATURE_LEVEL_9_3 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_0", ULongToPtr( D3D_FEATURE_LEVEL_10_0 ) ); - } - break; - case D3D_FEATURE_LEVEL_10_1: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_10_1" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_10_1", ULongToPtr( D3D_FEATURE_LEVEL_10_1 ) ); - } - break; - case D3D_FEATURE_LEVEL_11_0: - { - if( !pComboBox->ContainsItem( L"D3D_FEATURE_LEVEL_11_0" ) ) - pComboBox->AddItem( L"D3D_FEATURE_LEVEL_11_0", ULongToPtr( D3D_FEATURE_LEVEL_11_0 ) ); - } - break; - } - -} - -D3D_FEATURE_LEVEL CD3DSettingsDlg::GetSelectedFeatureLevel() { - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_FEATURE_LEVEL ); - - return (D3D_FEATURE_LEVEL)PtrToUlong( pComboBox->GetSelectedData() ); -} -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddRefreshRate( DWORD dwRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( dwRate == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", dwRate ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - pComboBox->AddItem( strRefreshRate, ULongToPtr( dwRate ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedRefreshRate() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11RefreshRate( DXGI_RATIONAL RefreshRate ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - WCHAR strRefreshRate[50]; - - if( RefreshRate.Numerator == 0 && RefreshRate.Denominator == 0 ) - wcscpy_s( strRefreshRate, 50, L"Default Rate" ); - else - swprintf_s( strRefreshRate, 50, L"%d Hz", RefreshRate.Numerator / RefreshRate.Denominator ); - - if( !pComboBox->ContainsItem( strRefreshRate ) ) - { - DXGI_RATIONAL* pNewRate = new DXGI_RATIONAL; - if( pNewRate ) - { - *pNewRate = RefreshRate; - pComboBox->AddItem( strRefreshRate, pNewRate ); - } - } -} - - -//------------------------------------------------------------------------------------- -DXGI_RATIONAL CD3DSettingsDlg::GetSelectedD3D11RefreshRate() -{ - DXGI_RATIONAL dxgiR; - dxgiR.Numerator = 0; - dxgiR.Denominator = 1; - - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_REFRESH_RATE ); - - return *reinterpret_cast<DXGI_RATIONAL*>( pComboBox->GetSelectedData() ); - -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddBackBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedBackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_BACK_BUFFER_FORMAT ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11BackBufferFormat( DXGI_FORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - if( !pComboBox->ContainsItem( DXUTDXGIFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTDXGIFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -DXGI_FORMAT CD3DSettingsDlg::GetSelectedD3D11BackBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_BACK_BUFFER_FORMAT ); - - return ( DXGI_FORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddDepthStencilBufferFormat( D3DFORMAT format ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - if( !pComboBox->ContainsItem( DXUTD3DFormatToString( format, TRUE ) ) ) - pComboBox->AddItem( DXUTD3DFormatToString( format, TRUE ), ULongToPtr( format ) ); -} - - -//------------------------------------------------------------------------------------- -D3DFORMAT CD3DSettingsDlg::GetSelectedDepthStencilBufferFormat() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL ); - - return ( D3DFORMAT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleType( D3DMULTISAMPLE_TYPE type ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTMultisampleTypeToString( type ) ) ) - pComboBox->AddItem( DXUTMultisampleTypeToString( type ), ULongToPtr( type ) ); -} - - -//------------------------------------------------------------------------------------- -D3DMULTISAMPLE_TYPE CD3DSettingsDlg::GetSelectedMultisampleType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_TYPE ); - - return ( D3DMULTISAMPLE_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddMultisampleQuality( DWORD dwQuality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", dwQuality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( dwQuality ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedMultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_MULTISAMPLE_QUALITY ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleCount( UINT Count ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - WCHAR str[50]; - swprintf_s( str, 50, L"%u", Count ); - - if( !pComboBox->ContainsItem( str ) ) - pComboBox->AddItem( str, ULongToPtr( Count ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleCount() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_COUNT ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11MultisampleQuality( UINT Quality ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - WCHAR strQuality[50]; - swprintf_s( strQuality, 50, L"%d", Quality ); - - if( !pComboBox->ContainsItem( strQuality ) ) - pComboBox->AddItem( strQuality, ULongToPtr( Quality ) ); -} - - -//------------------------------------------------------------------------------------- -UINT CD3DSettingsDlg::GetSelectedD3D11MultisampleQuality() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_MULTISAMPLE_QUALITY ); - - return ( UINT )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddVertexProcessingType( DWORD dwType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - if( !pComboBox->ContainsItem( DXUTVertexProcessingTypeToString( dwType ) ) ) - pComboBox->AddItem( DXUTVertexProcessingTypeToString( dwType ), ULongToPtr( dwType ) ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedVertexProcessingType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_VERTEX_PROCESSING ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedPresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - - -//------------------------------------------------------------------------------------- -DWORD CD3DSettingsDlg::GetSelectedD3D11PresentInterval() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_PRESENT_INTERVAL ); - - return PtrToUlong( pComboBox->GetSelectedData() ); -} - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::GetSelectedDebugDeviceValue() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_D3D11_DEBUG_DEVICE ); - - return pCheckBox->GetChecked(); -} - - -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::SetDeviceClip( bool bDeviceClip ) -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - pCheckBox->SetChecked( bDeviceClip ); -} - - -//------------------------------------------------------------------------------------- -bool CD3DSettingsDlg::IsDeviceClip() -{ - CDXUTCheckBox* pCheckBox = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_DEVICECLIP ); - return pCheckBox->GetChecked(); -} - -//-------------------------------------------------------------------------------------- -// Updates the resolution list for D3D11 -//-------------------------------------------------------------------------------------- -HRESULT CD3DSettingsDlg::UpdateD3D11Resolutions() -{ - - const DWORD dwWidth = g_DeviceSettings.d3d11.sd.BufferDesc.Width; - const DWORD dwHeight = g_DeviceSettings.d3d11.sd.BufferDesc.Height; - - // DXUTSETTINGSDLG_D3D11_RESOLUTION - CDXUTComboBox* pResolutionComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D11_RESOLUTION ); - pResolutionComboBox->RemoveAllItems(); - - CD3D11EnumOutputInfo* pOutputInfo = GetCurrentD3D11OutputInfo(); - if( pOutputInfo == NULL ) - return E_FAIL; - - bool bShowAll = m_Dialog.GetCheckBox( DXUTSETTINGSDLG_RESOLUTION_SHOW_ALL )->GetChecked(); - - // Get the desktop aspect ratio - DXGI_MODE_DESC dmDesktop; - DXUTGetDesktopResolution( g_DeviceSettings.d3d11.AdapterOrdinal, &dmDesktop.Width, &dmDesktop.Height ); - float fDesktopAspectRatio = dmDesktop.Width / ( float )dmDesktop.Height; - - for( int idm = 0; idm < pOutputInfo->displayModeList.GetSize(); idm++ ) - { - DXGI_MODE_DESC DisplayMode = pOutputInfo->displayModeList.GetAt( idm ); - float fAspect = ( float )DisplayMode.Width / ( float )DisplayMode.Height; - - if( DisplayMode.Format == g_DeviceSettings.d3d11.sd.BufferDesc.Format ) - { - // If "Show All" is not checked, then hide all resolutions - // that don't match the aspect ratio of the desktop resolution - if( bShowAll || ( !bShowAll && fabsf( fDesktopAspectRatio - fAspect ) < 0.05f ) ) - { - AddD3D11Resolution( DisplayMode.Width, DisplayMode.Height ); - } - } - } - - const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.d3d11.sd.BufferDesc.Width, - g_DeviceSettings.d3d11.sd.BufferDesc.Height ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( dwCurResolution ) ); - - - bool bWindowed = IsWindowed(); - if( bWindowed ) - { - pResolutionComboBox->RemoveAllItems(); - AddD3D11Resolution( dwWidth, dwHeight ); - - pResolutionComboBox->SetSelectedByData( ULongToPtr( MAKELONG( dwWidth, dwHeight ) ) ); - - - } - - return S_OK; -} - - -// -//------------------------------------------------------------------------------------- -void CD3DSettingsDlg::AddD3D11DeviceType( D3D_DRIVER_TYPE devType ) -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - if( !pComboBox->ContainsItem( DXUTD3DX11DeviceTypeToString( devType ) ) ) - pComboBox->AddItem( DXUTD3DX11DeviceTypeToString( devType ), ULongToPtr( devType ) ); -} - - -//------------------------------------------------------------------------------------- -D3D_DRIVER_TYPE CD3DSettingsDlg::GetSelectedD3D11DeviceType() -{ - CDXUTComboBox* pComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEVICE_TYPE ); - - return ( D3D_DRIVER_TYPE )PtrToUlong( pComboBox->GetSelectedData() ); -} - - -void CD3DSettingsDlg::UpdateModeChangeTimeoutText( int nSecRemaining ) -{ - const WCHAR StrTimeout[] = L"Reverting to previous display settings in %d seconds"; - const DWORD CchBuf = sizeof( StrTimeout ) / sizeof( WCHAR ) + 16; - WCHAR buf[CchBuf]; - - swprintf_s( buf, CchBuf, StrTimeout, nSecRemaining ); - - CDXUTStatic* pStatic = m_RevertModeDialog.GetStatic( DXUTSETTINGSDLG_STATIC_MODE_CHANGE_TIMEOUT ); - pStatic->SetText( buf ); -} - -//-------------------------------------------------------------------------------------- -// Returns the string for the given DXUTDeviceVersion. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTAPIVersionToString( DXUTDeviceVersion version ) -{ - switch( version ) - { - case DXUT_D3D9_DEVICE: - return L"Direct3D 9"; - case DXUT_D3D11_DEVICE: - return L"Direct3D 11"; - default: - return L"Unknown version"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DDEVTYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DDeviceTypeToString( D3DDEVTYPE devType ) -{ - switch( devType ) - { - case D3DDEVTYPE_HAL: - return L"D3DDEVTYPE_HAL"; - case D3DDEVTYPE_SW: - return L"D3DDEVTYPE_SW"; - case D3DDEVTYPE_REF: - return L"D3DDEVTYPE_REF"; - default: - return L"Unknown devType"; - } -} - - - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3D_DRIVER_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTD3DX11DeviceTypeToString( D3D_DRIVER_TYPE devType ) -{ - switch( devType ) - { - case D3D_DRIVER_TYPE_HARDWARE: - return L"D3D_DRIVER_TYPE_HARDWARE"; - case D3D_DRIVER_TYPE_REFERENCE: - return L"D3D_DRIVER_TYPE_REFERENCE"; - case D3D_DRIVER_TYPE_NULL: - return L"D3D_DRIVER_TYPE_NULL"; - case D3D_DRIVER_TYPE_WARP: - return L"D3D_DRIVER_TYPE_WARP"; - default: - return L"Unknown devType"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given D3DMULTISAMPLE_TYPE. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTMultisampleTypeToString( D3DMULTISAMPLE_TYPE MultiSampleType ) -{ - switch( MultiSampleType ) - { - case D3DMULTISAMPLE_NONE: - return L"D3DMULTISAMPLE_NONE"; - case D3DMULTISAMPLE_NONMASKABLE: - return L"D3DMULTISAMPLE_NONMASKABLE"; - case D3DMULTISAMPLE_2_SAMPLES: - return L"D3DMULTISAMPLE_2_SAMPLES"; - case D3DMULTISAMPLE_3_SAMPLES: - return L"D3DMULTISAMPLE_3_SAMPLES"; - case D3DMULTISAMPLE_4_SAMPLES: - return L"D3DMULTISAMPLE_4_SAMPLES"; - case D3DMULTISAMPLE_5_SAMPLES: - return L"D3DMULTISAMPLE_5_SAMPLES"; - case D3DMULTISAMPLE_6_SAMPLES: - return L"D3DMULTISAMPLE_6_SAMPLES"; - case D3DMULTISAMPLE_7_SAMPLES: - return L"D3DMULTISAMPLE_7_SAMPLES"; - case D3DMULTISAMPLE_8_SAMPLES: - return L"D3DMULTISAMPLE_8_SAMPLES"; - case D3DMULTISAMPLE_9_SAMPLES: - return L"D3DMULTISAMPLE_9_SAMPLES"; - case D3DMULTISAMPLE_10_SAMPLES: - return L"D3DMULTISAMPLE_10_SAMPLES"; - case D3DMULTISAMPLE_11_SAMPLES: - return L"D3DMULTISAMPLE_11_SAMPLES"; - case D3DMULTISAMPLE_12_SAMPLES: - return L"D3DMULTISAMPLE_12_SAMPLES"; - case D3DMULTISAMPLE_13_SAMPLES: - return L"D3DMULTISAMPLE_13_SAMPLES"; - case D3DMULTISAMPLE_14_SAMPLES: - return L"D3DMULTISAMPLE_14_SAMPLES"; - case D3DMULTISAMPLE_15_SAMPLES: - return L"D3DMULTISAMPLE_15_SAMPLES"; - case D3DMULTISAMPLE_16_SAMPLES: - return L"D3DMULTISAMPLE_16_SAMPLES"; - default: - return L"Unknown Multisample Type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given vertex processing type -//-------------------------------------------------------------------------------------- -WCHAR* DXUTVertexProcessingTypeToString( DWORD vpt ) -{ - switch( vpt ) - { - case D3DCREATE_SOFTWARE_VERTEXPROCESSING: - return L"Software vertex processing"; - case D3DCREATE_MIXED_VERTEXPROCESSING: - return L"Mixed vertex processing"; - case D3DCREATE_HARDWARE_VERTEXPROCESSING: - return L"Hardware vertex processing"; - case D3DCREATE_PUREDEVICE: - return L"Pure hardware vertex processing"; - default: - return L"Unknown vertex processing type"; - } -} - - -//-------------------------------------------------------------------------------------- -// Returns the string for the given present interval. -//-------------------------------------------------------------------------------------- -WCHAR* DXUTPresentIntervalToString( UINT pi ) -{ - switch( pi ) - { - case D3DPRESENT_INTERVAL_IMMEDIATE: - return L"D3DPRESENT_INTERVAL_IMMEDIATE"; - case D3DPRESENT_INTERVAL_DEFAULT: - return L"D3DPRESENT_INTERVAL_DEFAULT"; - case D3DPRESENT_INTERVAL_ONE: - return L"D3DPRESENT_INTERVAL_ONE"; - case D3DPRESENT_INTERVAL_TWO: - return L"D3DPRESENT_INTERVAL_TWO"; - case D3DPRESENT_INTERVAL_THREE: - return L"D3DPRESENT_INTERVAL_THREE"; - case D3DPRESENT_INTERVAL_FOUR: - return L"D3DPRESENT_INTERVAL_FOUR"; - default: - return L"Unknown PresentInterval"; - } -} - - |