⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d3dsettingsform.cs

📁 《.NET游戏编程入门经典-c#篇》
💻 CS
📖 第 1 页 / 共 3 页
字号:
			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 == adapterFormat &&
				deviceCombo.BackBufferFormat == 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;
	}
}


/// <summary>
/// Current D3D settings: adapter, device, mode, formats, etc.
/// </summary>
public class D3DSettings {
	public bool IsWindowed;

	public GraphicsAdapterInfo WindowedAdapterInfo;
	public GraphicsDeviceInfo WindowedDeviceInfo;
	public DeviceCombo WindowedDeviceCombo;
	public DisplayMode WindowedDisplayMode; // not changable by the user
	public DepthFormat WindowedDepthStencilBufferFormat;
	public MultiSampleType WindowedMultisampleType;
	public int WindowedMultisampleQuality;
	public VertexProcessingType WindowedVertexProcessingType;
	public PresentInterval WindowedPresentInterval;
	public int WindowedWidth;
	public int WindowedHeight;

	public GraphicsAdapterInfo FullscreenAdapterInfo;
	public GraphicsDeviceInfo FullscreenDeviceInfo;
	public DeviceCombo FullscreenDeviceCombo;
	public DisplayMode FullscreenDisplayMode; // changable by the user
	public DepthFormat FullscreenDepthStencilBufferFormat;
	public MultiSampleType FullscreenMultisampleType;
	public int FullscreenMultisampleQuality;
	public VertexProcessingType FullscreenVertexProcessingType;
	public PresentInterval FullscreenPresentInterval;


    
    
	/// <summary>
	/// The adapter information
	/// </summary>
	public GraphicsAdapterInfo AdapterInfo {
		get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; }
		set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; }
	}


    
    
	/// <summary>
	/// The device information
	/// </summary>
	public GraphicsDeviceInfo DeviceInfo {
		get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; }
		set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; }
	}


    
    
	/// <summary>
	/// The device combo
	/// </summary>
	public DeviceCombo DeviceCombo {
		get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; }
		set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; }
	}


    
    
	/// <summary>
	/// The adapters ordinal
	/// </summary>
	public int AdapterOrdinal {
		get { return DeviceCombo.AdapterOrdinal; }
	}


    
    
	/// <summary>
	/// The type of device this is
	/// </summary>
	public DeviceType DevType {
		get { return DeviceCombo.DevType; }
	}


    
    
	/// <summary>
	/// The back buffers format
	/// </summary>
	public Format BackBufferFormat {
		get { return DeviceCombo.BackBufferFormat; }
	}


    

	/// <summary>
	/// The display mode
	/// </summary>
	public DisplayMode DisplayMode {
		get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; }
		set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; }
	}



    
	/// <summary>
	/// The Depth stencils format
	/// </summary>
	public DepthFormat DepthStencilBufferFormat {
		get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; }
		set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; }
	}




	/// <summary>
	/// The multisample type
	/// </summary>
	public MultiSampleType MultisampleType {
		get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; }
		set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; }
	}




	/// <summary>
	/// The multisample quality
	/// </summary>
	public int MultisampleQuality {
		get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; }
		set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; }
	}




	/// <summary>
	/// The vertex processing type
	/// </summary>
	public VertexProcessingType VertexProcessingType {
		get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; }
		set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; }
	}




	/// <summary>
	/// The presentation interval
	/// </summary>
	public PresentInterval PresentInterval {
		get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; }
		set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; }
	}




	/// <summary>
	/// Clone the d3d settings class
	/// </summary>
	public D3DSettings Clone() {
		return (D3DSettings)MemberwiseClone();
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -