📄 d3dsettings.cpp
字号:
{
ComboBoxSelect( IDC_RESOLUTION_COMBO, ULongToPtr( dwResolutionData ) );
}
}
}
}
if (!ComboBoxSomethingSelected( IDC_RESOLUTION_COMBO ) &&
ComboBoxCount( IDC_RESOLUTION_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_RESOLUTION_COMBO, 0 );
}
}
// Update backbuffer format combo box
D3DDeviceInfo* pDeviceInfo = (D3DDeviceInfo*)ComboBoxSelected( IDC_DEVICE_COMBO );
if( pDeviceInfo == NULL )
return;
ComboBoxClear( IDC_BACKBUFFERFORMAT_COMBO );
for( UINT idc = 0; idc < pDeviceInfo->pDeviceComboList->GetArrayCount(); idc++ )
{
D3DDeviceCombo* pDeviceCombo = pDeviceInfo->pDeviceComboList->Get(idc);
if (pDeviceCombo->IsWindowed == m_d3dSettings.IsWindowed &&
pDeviceCombo->AdapterFormat == m_d3dSettings.DisplayMode().Format)
{
if (!ComboBoxContainsText( IDC_BACKBUFFERFORMAT_COMBO,
D3DUtil_D3DFormatToString( pDeviceCombo->BackBufferFormat ) ) )
{
ComboBoxAdd( IDC_BACKBUFFERFORMAT_COMBO, (void*)pDeviceCombo->BackBufferFormat,
D3DUtil_D3DFormatToString( pDeviceCombo->BackBufferFormat ) );
if (pDeviceCombo->BackBufferFormat == m_d3dSettings.BackBufferFormat() )
ComboBoxSelect( IDC_BACKBUFFERFORMAT_COMBO, (void*)pDeviceCombo->BackBufferFormat );
}
}
}
if (!ComboBoxSomethingSelected( IDC_BACKBUFFERFORMAT_COMBO ) &&
ComboBoxCount( IDC_BACKBUFFERFORMAT_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_BACKBUFFERFORMAT_COMBO, 0 );
}
}
//-----------------------------------------------------------------------------
// Name: ResolutionChanged
// Desc: Respond to a change of selected resolution by rebuilding the
// refresh rate list.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::ResolutionChanged( void )
{
if (m_d3dSettings.IsWindowed)
return;
D3DAdapterInfo* pAdapterInfo = (D3DAdapterInfo*)ComboBoxSelected( IDC_ADAPTER_COMBO );
if( pAdapterInfo == NULL )
return;
// Update settingsNew with new resolution
DWORD dwResolutionData = PtrToUlong( ComboBoxSelected( IDC_RESOLUTION_COMBO ) );
UINT width = LOWORD( dwResolutionData );
UINT height = HIWORD( dwResolutionData );
m_d3dSettings.Fullscreen_DisplayMode.Width = width;
m_d3dSettings.Fullscreen_DisplayMode.Height = height;
// Update refresh rate list based on new resolution
D3DFORMAT adapterFormat = (D3DFORMAT)PtrToUlong( ComboBoxSelected( IDC_ADAPTERFORMAT_COMBO ) );
ComboBoxClear( IDC_REFRESHRATE_COMBO );
for( UINT idm = 0; idm < pAdapterInfo->pDisplayModeList->GetArrayCount(); idm++ )
{
D3DDISPLAYMODE displayMode = pAdapterInfo->pDisplayModeList->Get(idm);
if (displayMode.Format == adapterFormat &&
displayMode.Width == width &&
displayMode.Height == height)
{
TCHAR strRefreshRate[50];
if( displayMode.RefreshRate == 0 )
lstrcpy( strRefreshRate, TEXT("Default Rate") );
else
_sntprintf( strRefreshRate, 50, TEXT("%d Hz"), displayMode.RefreshRate );
strRefreshRate[49] = 0;
if( !ComboBoxContainsText( IDC_REFRESHRATE_COMBO, strRefreshRate ) )
{
ComboBoxAdd( IDC_REFRESHRATE_COMBO, UlongToPtr( displayMode.RefreshRate ), strRefreshRate );
if (m_d3dSettings.Fullscreen_DisplayMode.RefreshRate == displayMode.RefreshRate)
ComboBoxSelect( IDC_REFRESHRATE_COMBO, UlongToPtr( displayMode.RefreshRate ) );
}
}
}
if (!ComboBoxSomethingSelected( IDC_REFRESHRATE_COMBO ) &&
ComboBoxCount( IDC_REFRESHRATE_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_REFRESHRATE_COMBO, 0 );
}
}
//-----------------------------------------------------------------------------
// Name: RefreshRateChanged
// Desc: Respond to a change of selected refresh rate.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::RefreshRateChanged( void )
{
if( m_d3dSettings.IsWindowed )
return;
// Update settingsNew with new refresh rate
UINT refreshRate = PtrToUlong( ComboBoxSelected( IDC_REFRESHRATE_COMBO ) );
m_d3dSettings.Fullscreen_DisplayMode.RefreshRate = refreshRate;
}
//-----------------------------------------------------------------------------
// Name: BackBufferFormatChanged
// Desc: Respond to a change of selected back buffer format by rebuilding
// the depth/stencil format list, multisample type list, and vertex
// processing type list.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::BackBufferFormatChanged( void )
{
D3DDeviceInfo* pDeviceInfo = (D3DDeviceInfo*)ComboBoxSelected( IDC_DEVICE_COMBO );
D3DFORMAT adapterFormat = (D3DFORMAT)PtrToUlong( ComboBoxSelected( IDC_ADAPTERFORMAT_COMBO ) );
D3DFORMAT backBufferFormat = (D3DFORMAT)PtrToUlong( ComboBoxSelected( IDC_BACKBUFFERFORMAT_COMBO ) );
if( pDeviceInfo == NULL )
return;
for( UINT idc = 0; idc < pDeviceInfo->pDeviceComboList->GetArrayCount(); idc++ )
{
D3DDeviceCombo* pDeviceCombo = pDeviceInfo->pDeviceComboList->Get(idc);
if (pDeviceCombo->IsWindowed == m_d3dSettings.IsWindowed &&
pDeviceCombo->AdapterFormat == adapterFormat &&
pDeviceCombo->BackBufferFormat == backBufferFormat)
{
if( m_d3dSettings.IsWindowed )
m_d3dSettings.pWindowed_DeviceCombo = pDeviceCombo;
else
m_d3dSettings.pFullscreen_DeviceCombo = pDeviceCombo;
ComboBoxClear( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO );
if( m_pEnumeration->AppUsesDepthBuffer )
{
for( UINT ifmt = 0; ifmt < pDeviceCombo->pDepthStencilFormatList->GetArrayCount(); ifmt++ )
{
D3DFORMAT fmt = pDeviceCombo->pDepthStencilFormatList->Get(ifmt);
ComboBoxAdd( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO, (void*)fmt,
D3DUtil_D3DFormatToString(fmt) );
if( fmt == m_d3dSettings.DepthStencilBufferFormat() )
ComboBoxSelect( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO, (void*)fmt );
}
if (!ComboBoxSomethingSelected( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO ) &&
ComboBoxCount( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO, 0 );
}
}
else
{
EnableWindow( GetDlgItem( m_hDlg, IDC_DEPTHSTENCILBUFFERFORMAT_COMBO ), false );
ComboBoxAdd( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO, NULL, TEXT("(not used)") );
ComboBoxSelectIndex( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO, 0 );
}
ComboBoxClear( IDC_VERTEXPROCESSING_COMBO );
for( UINT ivpt = 0; ivpt < pDeviceCombo->pVertexProcessingTypeList->GetArrayCount(); ivpt++ )
{
VertexProcessingType vpt = pDeviceCombo->pVertexProcessingTypeList->Get(ivpt);
ComboBoxAdd( IDC_VERTEXPROCESSING_COMBO, (void*)vpt, VertexProcessingTypeToString(vpt) );
if( vpt == m_d3dSettings.GetVertexProcessingType() )
ComboBoxSelect( IDC_VERTEXPROCESSING_COMBO, (void*)vpt );
}
if (!ComboBoxSomethingSelected( IDC_VERTEXPROCESSING_COMBO ) &&
ComboBoxCount( IDC_VERTEXPROCESSING_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_VERTEXPROCESSING_COMBO, 0 );
}
ComboBoxClear( IDC_PRESENTINTERVAL_COMBO );
for( UINT ipi = 0; ipi < pDeviceCombo->pPresentIntervalList->GetArrayCount(); ipi++ )
{
UINT pi = pDeviceCombo->pPresentIntervalList->Get(ipi);
ComboBoxAdd( IDC_PRESENTINTERVAL_COMBO, UlongToPtr( pi ), PresentIntervalToString(pi) );
if( pi == m_d3dSettings.PresentInterval() )
ComboBoxSelect( IDC_PRESENTINTERVAL_COMBO, UlongToPtr( pi ) );
}
if (!ComboBoxSomethingSelected( IDC_PRESENTINTERVAL_COMBO ) &&
ComboBoxCount( IDC_PRESENTINTERVAL_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_PRESENTINTERVAL_COMBO, 0 );
}
break;
}
}
}
//-----------------------------------------------------------------------------
// Name: DepthStencilBufferFormatChanged
// Desc: Respond to a change of selected depth/stencil buffer format.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::DepthStencilBufferFormatChanged( void )
{
D3DFORMAT fmt = (D3DFORMAT)PtrToUlong( ComboBoxSelected( IDC_DEPTHSTENCILBUFFERFORMAT_COMBO ) );
if( m_pEnumeration->AppUsesDepthBuffer )
m_d3dSettings.SetDepthStencilBufferFormat( fmt );
// Build multisample list
D3DDeviceCombo* pDeviceCombo = m_d3dSettings.PDeviceCombo();
ComboBoxClear( IDC_MULTISAMPLE_COMBO );
for( UINT ims = 0; ims < pDeviceCombo->pMultiSampleTypeList->GetArrayCount(); ims++ )
{
D3DMULTISAMPLE_TYPE msType = pDeviceCombo->pMultiSampleTypeList->Get(ims);
// check for DS/MS conflicts
BOOL bConflictFound = FALSE;
for( UINT iConf = 0; iConf < pDeviceCombo->pDSMSConflictList->GetArrayCount(); iConf++ )
{
D3DDSMSConflict* pDSMSConf = &(pDeviceCombo->pDSMSConflictList->Get(iConf));
if( pDSMSConf->DSFormat == fmt && pDSMSConf->MSType == msType )
{
bConflictFound = TRUE;
break;
}
}
if( !bConflictFound )
{
ComboBoxAdd( IDC_MULTISAMPLE_COMBO, (void*)msType, MultisampleTypeToString(msType) );
if( msType == m_d3dSettings.MultisampleType() )
ComboBoxSelect( IDC_MULTISAMPLE_COMBO, (void*)msType );
}
}
if (!ComboBoxSomethingSelected( IDC_MULTISAMPLE_COMBO ) &&
ComboBoxCount( IDC_MULTISAMPLE_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_MULTISAMPLE_COMBO, 0 );
}
}
//-----------------------------------------------------------------------------
// Name: MultisampleTypeChanged
// Desc: Respond to a change of selected multisample type.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::MultisampleTypeChanged( void )
{
D3DMULTISAMPLE_TYPE mst = (D3DMULTISAMPLE_TYPE)PtrToUlong( ComboBoxSelected( IDC_MULTISAMPLE_COMBO ) );
m_d3dSettings.SetMultisampleType( mst );
// Set up max quality for this mst
D3DDeviceCombo* pDeviceCombo = m_d3dSettings.PDeviceCombo();
DWORD maxQuality = 0;
for( UINT ims = 0; ims < pDeviceCombo->pMultiSampleTypeList->GetArrayCount(); ims++ )
{
D3DMULTISAMPLE_TYPE msType = pDeviceCombo->pMultiSampleTypeList->Get(ims);
if( msType == mst )
{
maxQuality = pDeviceCombo->pMultiSampleQualityList->Get(ims);
break;
}
}
ComboBoxClear( IDC_MULTISAMPLE_QUALITY_COMBO );
for( UINT msq = 0; msq < maxQuality; msq++ )
{
TCHAR str[100];
wsprintf( str, TEXT("%d"), msq );
ComboBoxAdd( IDC_MULTISAMPLE_QUALITY_COMBO, UlongToPtr( msq ), str );
if( msq == m_d3dSettings.MultisampleQuality() )
ComboBoxSelect( IDC_MULTISAMPLE_QUALITY_COMBO, UlongToPtr( msq ) );
}
if (!ComboBoxSomethingSelected( IDC_MULTISAMPLE_QUALITY_COMBO ) &&
ComboBoxCount( IDC_MULTISAMPLE_QUALITY_COMBO ) > 0)
{
ComboBoxSelectIndex( IDC_MULTISAMPLE_QUALITY_COMBO, 0 );
}
}
//-----------------------------------------------------------------------------
// Name: MultisampleQualityChanged
// Desc: Respond to a change of selected multisample quality.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::MultisampleQualityChanged( void )
{
DWORD msq = (DWORD)PtrToUlong( ComboBoxSelected( IDC_MULTISAMPLE_QUALITY_COMBO ) );
m_d3dSettings.SetMultisampleQuality( msq );
}
//-----------------------------------------------------------------------------
// Name: VertexProcessingChanged
// Desc: Respond to a change of selected vertex processing type.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::VertexProcessingChanged( void )
{
VertexProcessingType vpt = (VertexProcessingType)PtrToUlong( ComboBoxSelected( IDC_VERTEXPROCESSING_COMBO ) );
m_d3dSettings.SetVertexProcessingType( vpt );
}
//-----------------------------------------------------------------------------
// Name: PresentIntervalChanged
// Desc: Respond to a change of selected present interval.
//-----------------------------------------------------------------------------
void CD3DSettingsDialog::PresentIntervalChanged( void )
{
UINT pi = PtrToUlong( ComboBoxSelected( IDC_PRESENTINTERVAL_COMBO ) );
m_d3dSettings.SetPresentInterval( pi );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -