?? dxutsettingsdlg.cpp
字號:
}
const DWORD dwCurResolution = MAKELONG( g_DeviceSettings.pp.BackBufferWidth,
g_DeviceSettings.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();
CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
if( pDeviceInfo == NULL )
return E_FAIL;
const BOOL bWindowed = IsWindowed();
bool bHasWindowedBackBuffer = false;
for( int idc = 0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )
{
CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );
if( pDeviceCombo->Windowed == bWindowed &&
pDeviceCombo->AdapterFormat == g_DeviceSettings.AdapterFormat )
{
AddBackBufferFormat( pDeviceCombo->BackBufferFormat );
bHasWindowedBackBuffer = true;
}
}
pBackBufferFormatComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.pp.BackBufferFormat) );
hr = OnBackBufferFormatChanged();
if( FAILED(hr) )
return hr;
if( !bHasWindowedBackBuffer )
{
m_Dialog.SetControlEnabled( DXUTSETTINGSDLG_WINDOWED, false );
if( g_DeviceSettings.pp.Windowed )
{
SetWindowed( false );
hr = OnWindowedFullScreenChanged();
if( FAILED(hr) )
return hr;
}
}
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnResolutionChanged()
{
HRESULT hr = S_OK;
CD3DEnumAdapterInfo* pAdapterInfo = GetCurrentAdapterInfo();
if( pAdapterInfo == NULL )
return E_FAIL;
// Set resolution
DWORD dwWidth, dwHeight;
GetSelectedResolution( &dwWidth, &dwHeight );
g_DeviceSettings.pp.BackBufferWidth = dwWidth;
g_DeviceSettings.pp.BackBufferHeight = dwHeight;
DWORD dwRefreshRate = g_DeviceSettings.pp.FullScreen_RefreshRateInHz;
// Update the refresh rate list
CDXUTComboBox* pRefreshRateComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_REFRESH_RATE );
pRefreshRateComboBox->RemoveAllItems();
D3DFORMAT adapterFormat = g_DeviceSettings.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
g_DeviceSettings.pp.FullScreen_RefreshRateInHz = GetSelectedRefreshRate();
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnBackBufferFormatChanged()
{
HRESULT hr = S_OK;
g_DeviceSettings.pp.BackBufferFormat = GetSelectedBackBufferFormat();
D3DFORMAT adapterFormat = g_DeviceSettings.AdapterFormat;
D3DFORMAT backBufferFormat = g_DeviceSettings.pp.BackBufferFormat;
CD3DEnumDeviceInfo* pDeviceInfo = GetCurrentDeviceInfo();
if( pDeviceInfo == NULL )
return E_FAIL;
bool bAllowSoftwareVP, bAllowHardwareVP, bAllowPureHardwareVP, bAllowMixedVP;
DXUTGetEnumeration()->GetPossibleVertexProcessingList( &bAllowSoftwareVP, &bAllowHardwareVP,
&bAllowPureHardwareVP, &bAllowMixedVP );
for( int idc=0; idc < pDeviceInfo->deviceSettingsComboList.GetSize(); idc++ )
{
CD3DEnumDeviceSettingsCombo* pDeviceCombo = pDeviceInfo->deviceSettingsComboList.GetAt( idc );
if( pDeviceCombo->Windowed == (g_DeviceSettings.pp.Windowed == TRUE) &&
pDeviceCombo->AdapterFormat == adapterFormat &&
pDeviceCombo->BackBufferFormat == backBufferFormat )
{
CDXUTComboBox* pDepthStencilComboBox = m_Dialog.GetComboBox( DXUTSETTINGSDLG_DEPTH_STENCIL );
pDepthStencilComboBox->RemoveAllItems();
pDepthStencilComboBox->SetEnabled( (g_DeviceSettings.pp.EnableAutoDepthStencil == TRUE) );
if( g_DeviceSettings.pp.EnableAutoDepthStencil )
{
for( int ifmt=0; ifmt < pDeviceCombo->depthStencilFormatList.GetSize(); ifmt++ )
{
D3DFORMAT fmt = pDeviceCombo->depthStencilFormatList.GetAt( ifmt );
AddDepthStencilBufferFormat( fmt );
}
pDepthStencilComboBox->SetSelectedByData( ULongToPtr(g_DeviceSettings.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.BehaviorFlags & D3DCREATE_PUREDEVICE )
pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_PUREDEVICE) );
else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_SOFTWARE_VERTEXPROCESSING )
pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_SOFTWARE_VERTEXPROCESSING) );
else if( g_DeviceSettings.BehaviorFlags & D3DCREATE_HARDWARE_VERTEXPROCESSING )
pVertexProcessingComboBox->SetSelectedByData( ULongToPtr(D3DCREATE_HARDWARE_VERTEXPROCESSING) );
else if( g_DeviceSettings.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.pp.PresentationInterval ) );
hr = OnPresentIntervalChanged();
if( FAILED(hr) )
return hr;
}
}
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnDepthStencilBufferFormatChanged()
{
HRESULT hr = S_OK;
D3DFORMAT depthStencilBufferFormat = GetSelectedDepthStencilBufferFormat();
if( g_DeviceSettings.pp.EnableAutoDepthStencil )
g_DeviceSettings.pp.AutoDepthStencilFormat = depthStencilBufferFormat;
CD3DEnumDeviceSettingsCombo* 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++ )
{
CD3DEnumDSMSConflict 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.pp.MultiSampleType) );
hr = OnMultisampleTypeChanged();
if( FAILED(hr) )
return hr;
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnMultisampleTypeChanged()
{
HRESULT hr = S_OK;
D3DMULTISAMPLE_TYPE multisampleType = GetSelectedMultisampleType();
g_DeviceSettings.pp.MultiSampleType = multisampleType;
CD3DEnumDeviceSettingsCombo* 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.pp.MultiSampleQuality) );
hr = OnMultisampleQualityChanged();
if( FAILED(hr) )
return hr;
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnMultisampleQualityChanged()
{
g_DeviceSettings.pp.MultiSampleQuality = GetSelectedMultisampleQuality();
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnVertexProcessingChanged()
{
DWORD dwBehavior = g_DeviceSettings.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.BehaviorFlags = dwBehavior | dwNewFlags;
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnPresentIntervalChanged()
{
g_DeviceSettings.pp.PresentationInterval = GetSelectedPresentInterval();
return S_OK;
}
//-------------------------------------------------------------------------------------
HRESULT CD3DSettingsDlg::OnDeviceClipChanged()
{
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -