📄 d3dsettingsform.cs
字号:
resolutionComboBox.SelectedIndex = 0;
resolutionComboBox.Enabled = false;
// Update refresh rate combo box
refreshRateComboBox.Items.Clear();
refreshRateComboBox.Items.Add(FormatRefreshRate(settings.WindowedDisplayMode.RefreshRate));
refreshRateComboBox.SelectedIndex = 0;
refreshRateComboBox.Enabled = false;
}
else
{
settings.IsWindowed = false;
settings.FullscreenAdapterInfo = adapterInfo;
settings.FullscreenDeviceInfo = deviceInfo;
// Update adapter format combo box
adapterFormatComboBox.Items.Clear();
foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList)
{
if (!adapterFormatComboBox.Items.Contains(deviceCombo.AdapterFormat))
{
adapterFormatComboBox.Items.Add(deviceCombo.AdapterFormat);
if (deviceCombo.AdapterFormat == (settings.IsWindowed ?
settings.WindowedDisplayMode.Format : settings.FullscreenDisplayMode.Format))
{
adapterFormatComboBox.SelectedItem = deviceCombo.AdapterFormat;
}
}
}
if (adapterFormatComboBox.SelectedItem == null && adapterFormatComboBox.Items.Count > 0)
adapterFormatComboBox.SelectedIndex = 0;
adapterFormatComboBox.Enabled = true;
// Update resolution combo box
resolutionComboBox.Enabled = true;
// Update refresh rate combo box
refreshRateComboBox.Enabled = true;
}
}
/// <summary>
/// Converts the given width and height into a formatted string
/// </summary>
private string FormatResolution(int width, int height)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(20);
sb.AppendFormat("{0} by {1}", width, height);
return sb.ToString();
}
/// <summary>
/// Converts the given refresh rate into a formatted string
/// </summary>
private string FormatRefreshRate(int refreshRate)
{
if( refreshRate == 0 )
{
return "Default Rate";
}
else
{
System.Text.StringBuilder sb = new System.Text.StringBuilder(20);
sb.AppendFormat("{0} Hz", refreshRate);
return sb.ToString();
}
}
/// <summary>
/// Respond to a change of selected adapter format by rebuilding the
/// resolution list and back buffer format list. Updating the selected
/// resolution and back buffer format will trigger updates of the rest
/// of the dialog.
/// </summary>
private void AdapterFormatChanged(object sender, System.EventArgs e)
{
if (!windowedRadioButton.Checked)
{
GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem;
Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem;
settings.FullscreenDisplayMode.Format = adapterFormat;
System.Text.StringBuilder sb = new System.Text.StringBuilder(20);
resolutionComboBox.Items.Clear();
foreach (DisplayMode displayMode in adapterInfo.DisplayModeList)
{
if (displayMode.Format == adapterFormat)
{
string resolutionString = FormatResolution(displayMode.Width, displayMode.Height);
if (!resolutionComboBox.Items.Contains(resolutionString))
{
resolutionComboBox.Items.Add(resolutionString);
if (settings.FullscreenDisplayMode.Width == displayMode.Width &&
settings.FullscreenDisplayMode.Height == displayMode.Height)
{
resolutionComboBox.SelectedItem = resolutionString;
}
}
}
}
if (resolutionComboBox.SelectedItem == null && resolutionComboBox.Items.Count > 0)
resolutionComboBox.SelectedIndex = 0;
}
// Update backbuffer format combo box
GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem;
backBufferFormatComboBox.Items.Clear();
foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList)
{
if (deviceCombo.IsWindowed == settings.IsWindowed &&
deviceCombo.AdapterFormat == settings.DisplayMode.Format)
{
if (!backBufferFormatComboBox.Items.Contains(deviceCombo.BackBufferFormat))
{
backBufferFormatComboBox.Items.Add(deviceCombo.BackBufferFormat);
if (deviceCombo.BackBufferFormat == settings.BackBufferFormat)
backBufferFormatComboBox.SelectedItem = deviceCombo.BackBufferFormat;
}
}
}
if (backBufferFormatComboBox.SelectedItem == null && backBufferFormatComboBox.Items.Count > 0)
backBufferFormatComboBox.SelectedIndex = 0;
}
/// <summary>
/// Respond to a change of selected resolution by rebuilding the
/// refresh rate list.
/// </summary>
private void ResolutionChanged(object sender, System.EventArgs e)
{
if (settings.IsWindowed)
return;
GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem;
// Update settings with new resolution
string resolution = (string)resolutionComboBox.SelectedItem;
string[] resolutionSplitStringArray = resolution.Split();
int width = int.Parse(resolutionSplitStringArray[0]);
int height = int.Parse(resolutionSplitStringArray[2]);
settings.FullscreenDisplayMode.Width = width;
settings.FullscreenDisplayMode.Height = height;
// Update refresh rate list based on new resolution
Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem;
refreshRateComboBox.Items.Clear();
foreach (DisplayMode displayMode in adapterInfo.DisplayModeList)
{
if (displayMode.Format == adapterFormat &&
displayMode.Width == width &&
displayMode.Height == height)
{
string refreshRateString = FormatRefreshRate(displayMode.RefreshRate);
if (!refreshRateComboBox.Items.Contains(refreshRateString))
{
refreshRateComboBox.Items.Add(refreshRateString);
if (settings.FullscreenDisplayMode.RefreshRate == displayMode.RefreshRate)
refreshRateComboBox.SelectedItem = refreshRateString;
}
}
}
if (refreshRateComboBox.SelectedItem == null && refreshRateComboBox.Items.Count > 0)
refreshRateComboBox.SelectedIndex = refreshRateComboBox.Items.Count - 1;
}
/// <summary>
/// Respond to a change of selected refresh rate.
/// </summary>
private void RefreshRateChanged(object sender, System.EventArgs e)
{
if (settings.IsWindowed)
return;
// Update settings with new refresh rate
string refreshRateString = (string)refreshRateComboBox.SelectedItem;
int refreshRate = 0;
if( refreshRateString != "Default Rate" )
{
string[] refreshRateSplitStringArray = refreshRateString.Split();
refreshRate = int.Parse(refreshRateSplitStringArray[0]);
}
settings.FullscreenDisplayMode.RefreshRate = refreshRate;
}
/// <summary>
/// Respond to a change of selected back buffer format by rebuilding
/// the depth/stencil format list, multisample type list, and vertex
/// processing type list.
/// </summary>
private void BackBufferFormatChanged(object sender, System.EventArgs e)
{
GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem;
Format adapterFormat = (Format)adapterFormatComboBox.SelectedItem;
Format backBufferFormat = (Format)backBufferFormatComboBox.SelectedItem;
foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList)
{
if (deviceCombo.IsWindowed == settings.IsWindowed &&
deviceCombo.AdapterFormat == settings.DisplayMode.Format &&
deviceCombo.BackBufferFormat == settings.BackBufferFormat)
{
deviceCombo.BackBufferFormat = backBufferFormat;
settings.DeviceCombo = deviceCombo;
depthStencilBufferComboBox.Items.Clear();
if (enumeration.AppUsesDepthBuffer)
{
foreach (DepthFormat format in deviceCombo.DepthStencilFormatList)
{
depthStencilBufferComboBox.Items.Add(format);
if (format == settings.DepthStencilBufferFormat)
depthStencilBufferComboBox.SelectedItem = format;
}
if (depthStencilBufferComboBox.SelectedItem == null && depthStencilBufferComboBox.Items.Count > 0)
depthStencilBufferComboBox.SelectedIndex = 0;
}
else
{
depthStencilBufferComboBox.Enabled = false;
depthStencilBufferComboBox.Items.Add("(not used)");
depthStencilBufferComboBox.SelectedIndex = 0;
}
vertexProcComboBox.Items.Clear();
foreach (VertexProcessingType vpt in deviceCombo.VertexProcessingTypeList)
{
vertexProcComboBox.Items.Add(vpt);
if (vpt == settings.VertexProcessingType)
vertexProcComboBox.SelectedItem = vpt;
}
if (vertexProcComboBox.SelectedItem == null && vertexProcComboBox.Items.Count > 0)
vertexProcComboBox.SelectedIndex = 0;
presentIntervalComboBox.Items.Clear();
foreach (PresentInterval pi in deviceCombo.PresentIntervalList)
{
presentIntervalComboBox.Items.Add(pi);
if (pi == settings.PresentInterval)
presentIntervalComboBox.SelectedItem = pi;
}
if (presentIntervalComboBox.SelectedItem == null && presentIntervalComboBox.Items.Count > 0)
presentIntervalComboBox.SelectedIndex = 0;
break;
}
}
}
/// <summary>
/// Respond to a change of selected depth/stencil buffer format.
/// </summary>
private void DepthStencilBufferFormatChanged(object sender, System.EventArgs e)
{
if (enumeration.AppUsesDepthBuffer)
settings.DepthStencilBufferFormat = (DepthFormat)depthStencilBufferComboBox.SelectedItem;
multisampleComboBox.Items.Clear();
foreach (MultiSampleType msType in settings.DeviceCombo.MultiSampleTypeList)
{
// Check for DS/MS conflict
bool conflictFound = false;
foreach (DepthStencilMultiSampleConflict DSMSConflict in settings.DeviceCombo.DepthStencilMultiSampleConflictList)
{
if (DSMSConflict.DepthStencilFormat == settings.DepthStencilBufferFormat &&
DSMSConflict.MultiSampleType == msType)
{
conflictFound = true;
break;
}
}
if (!conflictFound)
{
multisampleComboBox.Items.Add(msType);
if (msType == settings.MultisampleType)
multisampleComboBox.SelectedItem = msType;
}
}
if (multisampleComboBox.SelectedItem == null && multisampleComboBox.Items.Count > 0)
multisampleComboBox.SelectedIndex = 0;
}
/// <summary>
/// Respond to a change of selected multisample type.
/// </summary>
private void MultisampleTypeChanged(object sender, System.EventArgs e)
{
settings.MultisampleType = (MultiSampleType)multisampleComboBox.SelectedItem;
// Find current max multisample quality
int maxQuality = 0;
DeviceCombo deviceCombo = settings.DeviceCombo;
for( int i = 0; i < deviceCombo.MultiSampleQualityList.Count; i++ )
{
if( (MultiSampleType)deviceCombo.MultiSampleTypeList[i] == settings.MultisampleType )
{
maxQuality = (int)deviceCombo.MultiSampleQualityList[i];
break;
}
}
// Update multisample quality list based on new type
multisampleQualityComboBox.Items.Clear();
for( int iLevel = 0; iLevel < maxQuality; iLevel++ )
{
multisampleQualityComboBox.Items.Add(iLevel);
if( settings.MultisampleQuality == iLevel )
multisampleQualityComboBox.SelectedItem = iLevel;
}
if (multisampleQualityComboBox.SelectedItem == null && multisampleQualityComboBox.Items.Count > 0)
multisampleQualityComboBox.SelectedIndex = 0;
}
/// <summary>
/// Respond to a change of selected multisample quality.
/// </summary>
private void MultisampleQualityChanged(object sender, System.EventArgs e)
{
settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem;
}
/// <summary>
/// Respond to a change of selected vertex processing type.
/// </summary>
private void VertexProcessingChanged(object sender, System.EventArgs e)
{
settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem;
}
/// <summary>
/// Respond to a change of selected vertex processing type.
/// </summary>
private void PresentIntervalChanged(object sender, System.EventArgs e)
{
settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -