📄 dxutsettingsdlg.cpp
字号:
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_D3D10_DEVICE:
{
g_DeviceSettings.d3d10.DriverType = GetSelectedD3D10DeviceType();
// DXUTSETTINGSDLG_WINDOWED, DXUTSETTINGSDLG_FULLSCREEN
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, true );
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_FULLSCREEN, true );
SetWindowed( g_DeviceSettings.d3d10.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_D3D10_ADAPTER_OUTPUT_LABEL, !bWindowed );
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D10_RESOLUTION_LABEL, !bWindowed );
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D10_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_D3D10_ADAPTER_OUTPUT, !bWindowed );
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D10_RESOLUTION, !bWindowed );
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_D3D10_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_D3D10_DEVICE:
{
g_DeviceSettings.d3d10.sd.Windowed = bWindowed;
// Get available adapter output
CD3D10Enumeration *pD3DEnum = DXUTGetD3D10Enumeration();
CDXUTComboBox *pOutputComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D10_ADAPTER_OUTPUT );
pOutputComboBox->RemoveAllItems();
CD3D10EnumAdapterInfo *pAdapterInfo = pD3DEnum->GetAdapterInfo( g_DeviceSettings.d3d10.AdapterOrdinal );
for( int ioutput = 0; ioutput < pAdapterInfo->outputInfoList.GetSize(); ++ioutput )
{
CD3D10EnumOutputInfo *pOutputInfo = pAdapterInfo->outputInfoList.GetAt(ioutput);
AddD3D10AdapterOutput( pOutputInfo->Desc.DeviceName, pOutputInfo->Output );
}
pOutputComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.d3d10.Output) );
hr = OnAdapterOutputChanged();
if( FAILED(hr) )
return hr;
break;
}
}
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnAdapterOutputChanged()
{
HRESULT hr;
bool bWindowed = IsWindowed();
g_DeviceSettings.d3d10.sd.Windowed = bWindowed;
// If windowed, get the appropriate adapter format from Direct3D
if( g_DeviceSettings.d3d10.sd.Windowed )
{
DXGI_MODE_DESC mode;
hr = DXUTGetD3D10AdapterDisplayMode( g_DeviceSettings.d3d10.AdapterOrdinal, g_DeviceSettings.d3d10.Output, &mode );
if( FAILED(hr) )
return DXTRACE_ERR( L"GetD3D10AdapterDisplayMode", 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.d3d10.sd.BufferDesc.Width = mode.Width;
g_DeviceSettings.d3d10.sd.BufferDesc.Height = mode.Height;
}
else
{
g_DeviceSettings.d3d10.sd.BufferDesc.Width = rc.right;
g_DeviceSettings.d3d10.sd.BufferDesc.Height = rc.bottom;
}
g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate = mode.RefreshRate;
}
const DXGI_RATIONAL RefreshRate = g_DeviceSettings.d3d10.sd.BufferDesc.RefreshRate;
CD3D10EnumAdapterInfo* pAdapterInfo = GetCurrentD3D10AdapterInfo();
if( pAdapterInfo == NULL )
return E_FAIL;
// DXUTSETTINGSDLG_D3D10_RESOLUTION
hr = UpdateD3D10Resolutions();
if( FAILED(hr) )
return hr;
// DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT
CDXUTComboBox* pBackBufferFormatComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D10_BACK_BUFFER_FORMAT );
pBackBufferFormatComboBox->RemoveAllItems();
for( int idc = 0; idc < pAdapterInfo->deviceSettingsComboList.GetSize(); idc++ )
{
CD3D10EnumDeviceSettingsCombo* pDeviceCombo = pAdapterInfo->deviceSettingsComboList.GetAt( idc );
if( ( pDeviceCombo->Windowed == TRUE ) == bWindowed )
{
AddD3D10BackBufferFormat( pDeviceCombo->BackBufferFormat );
}
}
pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.d3d10.sd.BufferDesc.Format) );
hr = OnBackBufferFormatChanged();
if( FAILED(hr) )
return hr;
// DXUTSETTINGSDLG_D3D10_REFRESH_RATE
if( bWindowed )
{
CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_D3D10_REFRESH_RATE );
for( UINT i = 0; i < pRefreshRateComboBox->GetNumItems(); ++i )
{
DXGI_RATIONAL *pRefreshRate = reinterpret_cast<DXGI_RATIONAL *>( pRefreshRateComboBox->GetItemData( i ) );
delete pRefreshRate;
}
pRefreshRateComboBox->RemoveAllItems();
AddD3D10RefreshRate( RefreshRate );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -