www.pudn.com > IntroductionTo3DGameEngineDesign.rar > D3DSettingsForm.cs


//----------------------------------------------------------------------------- 
// File: D3DSettingsForm.cs 
// 
// Desc: Application form for setting up user defined display settings 
// 
// Copyright (c) 2001-2002 Microsoft Corporation. All rights reserved. 
//----------------------------------------------------------------------------- 
 
using System; 
using System.Collections; 
using System.Windows.Forms; 
using Microsoft.DirectX.Direct3D; 
 
///  
/// Current D3D settings: adapter, device, mode, formats, etc. 
///  
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; 
 
    ///  
    /// The adapter information 
    ///  
	public GraphicsAdapterInfo AdapterInfo 
	{ 
		get { return IsWindowed ? WindowedAdapterInfo : FullscreenAdapterInfo; } 
		set { if (IsWindowed) WindowedAdapterInfo = value; else FullscreenAdapterInfo = value; } 
	} 
 
 
    ///  
    /// The device information 
    ///  
	public GraphicsDeviceInfo DeviceInfo 
	{ 
		get { return IsWindowed ? WindowedDeviceInfo : FullscreenDeviceInfo; } 
		set { if (IsWindowed) WindowedDeviceInfo = value; else FullscreenDeviceInfo = value; } 
	} 
 
 
    ///  
    /// The device combo 
    ///  
	public DeviceCombo DeviceCombo 
	{ 
		get { return IsWindowed ? WindowedDeviceCombo : FullscreenDeviceCombo; } 
		set { if (IsWindowed) WindowedDeviceCombo = value; else FullscreenDeviceCombo = value; } 
	} 
 
 
    ///  
    /// The adapters ordinal 
    ///  
	public int AdapterOrdinal 
	{ 
		get { return DeviceCombo.AdapterOrdinal; } 
	} 
 
 
    ///  
    /// The type of device this is 
    ///  
	public DeviceType DevType 
	{ 
		get { return DeviceCombo.DevType; } 
	} 
 
 
    ///  
    /// The back buffers format 
    ///  
	public Format BackBufferFormat 
	{ 
		get { return DeviceCombo.BackBufferFormat; } 
	} 
 
 
    // The display mode 
	public DisplayMode DisplayMode 
	{ 
		get { return IsWindowed ? WindowedDisplayMode : FullscreenDisplayMode; } 
		set { if (IsWindowed) WindowedDisplayMode = value; else FullscreenDisplayMode = value; } 
	} 
 
 
    // The Depth stencils format 
	public DepthFormat DepthStencilBufferFormat 
	{ 
		get { return IsWindowed ? WindowedDepthStencilBufferFormat : FullscreenDepthStencilBufferFormat; } 
		set { if (IsWindowed) WindowedDepthStencilBufferFormat = value; else FullscreenDepthStencilBufferFormat = value; } 
	} 
 
 
    ///  
    /// The multisample type 
    ///  
	public MultiSampleType MultisampleType 
	{ 
		get { return IsWindowed ? WindowedMultisampleType : FullscreenMultisampleType; } 
		set { if (IsWindowed) WindowedMultisampleType = value; else FullscreenMultisampleType = value; } 
	} 
 
 
    ///  
    /// The multisample quality 
    ///  
	public int MultisampleQuality 
	{ 
		get { return IsWindowed ? WindowedMultisampleQuality : FullscreenMultisampleQuality; } 
		set { if (IsWindowed) WindowedMultisampleQuality = value; else FullscreenMultisampleQuality = value; } 
	} 
 
 
    ///  
    /// The vertex processing type 
    ///  
	public VertexProcessingType VertexProcessingType 
	{ 
		get { return IsWindowed ? WindowedVertexProcessingType : FullscreenVertexProcessingType; } 
		set { if (IsWindowed) WindowedVertexProcessingType = value; else FullscreenVertexProcessingType = value; } 
	} 
 
 
    ///  
    /// The presentation interval 
    ///  
	public PresentInterval PresentInterval 
	{ 
		get { return IsWindowed ? WindowedPresentInterval : FullscreenPresentInterval; } 
		set { if (IsWindowed) WindowedPresentInterval = value; else FullscreenPresentInterval = value; } 
	} 
 
 
    ///  
    /// Clone the d3d settings class 
    ///  
	public D3DSettings Clone()  
	{ 
		return (D3DSettings)MemberwiseClone(); 
	} 
} 
 
 
///  
/// A form to allow the user to change the current D3D settings. 
///  
public class D3DSettingsForm : System.Windows.Forms.Form 
{ 
	private D3DEnumeration enumeration; 
	public D3DSettings settings; // Potential new D3D settings 
 
	private System.Windows.Forms.GroupBox adapterDeviceGroupBox; 
	private System.Windows.Forms.Label displayAdapterLabel; 
	private System.Windows.Forms.ComboBox adapterComboBox; 
	private System.Windows.Forms.Label deviceLabel; 
	private System.Windows.Forms.ComboBox deviceComboBox; 
	private System.Windows.Forms.GroupBox modeSettingsGroupBox; 
	private System.Windows.Forms.RadioButton windowedRadioButton; 
	private System.Windows.Forms.RadioButton fullscreenRadioButton; 
	private System.Windows.Forms.Label adapterFormatLabel; 
	private System.Windows.Forms.ComboBox adapterFormatComboBox; 
	private System.Windows.Forms.Label resolutionLabel; 
	private System.Windows.Forms.ComboBox resolutionComboBox; 
	private System.Windows.Forms.Label refreshRateLabel; 
	private System.Windows.Forms.ComboBox refreshRateComboBox; 
	private System.Windows.Forms.GroupBox otherSettingsGroupBox; 
	private System.Windows.Forms.Label backBufferFormatLabel; 
	private System.Windows.Forms.ComboBox backBufferFormatComboBox; 
	private System.Windows.Forms.Label depthStencilBufferLabel; 
	private System.Windows.Forms.ComboBox depthStencilBufferComboBox; 
	private System.Windows.Forms.Label multisampleLabel; 
	private System.Windows.Forms.ComboBox multisampleComboBox; 
	private System.Windows.Forms.Label vertexProcLabel; 
	private System.Windows.Forms.ComboBox vertexProcComboBox; 
	private System.Windows.Forms.Label presentIntervalLabel; 
	private System.Windows.Forms.ComboBox presentIntervalComboBox; 
	private System.Windows.Forms.Button okButton; 
	private System.Windows.Forms.Button cancelButton; 
	private System.Windows.Forms.ComboBox multisampleQualityComboBox; 
	private System.Windows.Forms.Label multisampleQualityLabel; 
 
	///  
	/// Required designer variable. 
	///  
	private System.ComponentModel.Container components = null; 
 
	///  
	/// Constructor.  Pass in an enumeration and the current D3D settings. 
	///  
	public D3DSettingsForm(D3DEnumeration enumerationParam, D3DSettings settingsParam) 
	{ 
		enumeration = enumerationParam; 
		settings = settingsParam.Clone(); 
 
		// Required for Windows Form Designer support 
		InitializeComponent(); 
 
		// Fill adapter combo box.  Updating the selected adapter will trigger 
		// updates of the rest of the dialog. 
		foreach (GraphicsAdapterInfo adapterInfo in enumeration.AdapterInfoList) 
		{ 
			adapterComboBox.Items.Add(adapterInfo); 
			if (adapterInfo.AdapterOrdinal == settings.AdapterOrdinal) 
				adapterComboBox.SelectedItem = adapterInfo; 
		} 
		if (adapterComboBox.SelectedItem == null && adapterComboBox.Items.Count > 0) 
			adapterComboBox.SelectedIndex = 0; 
	} 
 
	///  
	/// Clean up any resources being used. 
	///  
	protected override void Dispose(bool Disposing) 
	{ 
		base.Dispose(Disposing); 
		if (components != null)	 
			components.Dispose(); 
	} 
 
	#region Windows Form Designer generated code 
	///  
	/// Required method for Designer support - do not modify 
	/// the contents of this method with the code editor. 
	///  
	private void InitializeComponent() 
	{ 
		this.adapterDeviceGroupBox = new System.Windows.Forms.GroupBox(); 
		this.deviceComboBox = new System.Windows.Forms.ComboBox(); 
		this.deviceLabel = new System.Windows.Forms.Label(); 
		this.adapterComboBox = new System.Windows.Forms.ComboBox(); 
		this.displayAdapterLabel = new System.Windows.Forms.Label(); 
		this.fullscreenRadioButton = new System.Windows.Forms.RadioButton(); 
		this.cancelButton = new System.Windows.Forms.Button(); 
		this.otherSettingsGroupBox = new System.Windows.Forms.GroupBox(); 
		this.multisampleQualityComboBox = new System.Windows.Forms.ComboBox(); 
		this.multisampleQualityLabel = new System.Windows.Forms.Label(); 
		this.multisampleComboBox = new System.Windows.Forms.ComboBox(); 
		this.backBufferFormatComboBox = new System.Windows.Forms.ComboBox(); 
		this.multisampleLabel = new System.Windows.Forms.Label(); 
		this.depthStencilBufferLabel = new System.Windows.Forms.Label(); 
		this.backBufferFormatLabel = new System.Windows.Forms.Label(); 
		this.depthStencilBufferComboBox = new System.Windows.Forms.ComboBox(); 
		this.vertexProcComboBox = new System.Windows.Forms.ComboBox(); 
		this.vertexProcLabel = new System.Windows.Forms.Label(); 
		this.presentIntervalComboBox = new System.Windows.Forms.ComboBox(); 
		this.presentIntervalLabel = new System.Windows.Forms.Label(); 
		this.resolutionComboBox = new System.Windows.Forms.ComboBox(); 
		this.windowedRadioButton = new System.Windows.Forms.RadioButton(); 
		this.resolutionLabel = new System.Windows.Forms.Label(); 
		this.refreshRateComboBox = new System.Windows.Forms.ComboBox(); 
		this.adapterFormatLabel = new System.Windows.Forms.Label(); 
		this.refreshRateLabel = new System.Windows.Forms.Label(); 
		this.okButton = new System.Windows.Forms.Button(); 
		this.modeSettingsGroupBox = new System.Windows.Forms.GroupBox(); 
		this.adapterFormatComboBox = new System.Windows.Forms.ComboBox(); 
		this.adapterDeviceGroupBox.SuspendLayout(); 
		this.otherSettingsGroupBox.SuspendLayout(); 
		this.modeSettingsGroupBox.SuspendLayout(); 
		this.SuspendLayout(); 
		//  
		// adapterDeviceGroupBox 
		//  
		this.adapterDeviceGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { 
																							this.deviceComboBox, 
																							this.deviceLabel, 
																							this.adapterComboBox, 
																							this.displayAdapterLabel}); 
		this.adapterDeviceGroupBox.Location = new System.Drawing.Point(16, 8); 
		this.adapterDeviceGroupBox.Name = "adapterDeviceGroupBox"; 
		this.adapterDeviceGroupBox.Size = new System.Drawing.Size(400, 80); 
		this.adapterDeviceGroupBox.TabIndex = 0; 
		this.adapterDeviceGroupBox.TabStop = false; 
		this.adapterDeviceGroupBox.Text = "Adapter and device"; 
		//  
		// deviceComboBox 
		//  
		this.deviceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.deviceComboBox.DropDownWidth = 121; 
		this.deviceComboBox.Location = new System.Drawing.Point(160, 48); 
		this.deviceComboBox.Name = "deviceComboBox"; 
		this.deviceComboBox.Size = new System.Drawing.Size(232, 21); 
		this.deviceComboBox.TabIndex = 3; 
		this.deviceComboBox.SelectedIndexChanged += new System.EventHandler(this.DeviceChanged); 
		//  
		// deviceLabel 
		//  
		this.deviceLabel.Location = new System.Drawing.Point(8, 48); 
		this.deviceLabel.Name = "deviceLabel"; 
		this.deviceLabel.Size = new System.Drawing.Size(152, 23); 
		this.deviceLabel.TabIndex = 2; 
		this.deviceLabel.Text = "Render &Device:"; 
		//  
		// adapterComboBox 
		//  
		this.adapterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.adapterComboBox.DropDownWidth = 121; 
		this.adapterComboBox.Location = new System.Drawing.Point(160, 24); 
		this.adapterComboBox.Name = "adapterComboBox"; 
		this.adapterComboBox.Size = new System.Drawing.Size(232, 21); 
		this.adapterComboBox.TabIndex = 1; 
		this.adapterComboBox.SelectedIndexChanged += new System.EventHandler(this.AdapterChanged); 
		//  
		// displayAdapterLabel 
		//  
		this.displayAdapterLabel.Location = new System.Drawing.Point(8, 24); 
		this.displayAdapterLabel.Name = "displayAdapterLabel"; 
		this.displayAdapterLabel.Size = new System.Drawing.Size(152, 23); 
		this.displayAdapterLabel.TabIndex = 0; 
		this.displayAdapterLabel.Text = "Display &Adapter:"; 
		//  
		// fullscreenRadioButton 
		//  
		this.fullscreenRadioButton.Location = new System.Drawing.Point(9, 38); 
		this.fullscreenRadioButton.Name = "fullscreenRadioButton"; 
		this.fullscreenRadioButton.Size = new System.Drawing.Size(152, 24); 
		this.fullscreenRadioButton.TabIndex = 1; 
		this.fullscreenRadioButton.Text = "&Fullscreen"; 
		//  
		// cancelButton 
		//  
		this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
		this.cancelButton.Location = new System.Drawing.Point(248, 464); 
		this.cancelButton.Name = "cancelButton"; 
		this.cancelButton.TabIndex = 4; 
		this.cancelButton.Text = "Cancel"; 
		//  
		// otherSettingsGroupBox 
		//  
		this.otherSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { 
																							this.multisampleQualityComboBox, 
																							this.multisampleQualityLabel, 
																							this.multisampleComboBox, 
																							this.backBufferFormatComboBox, 
																							this.multisampleLabel, 
																							this.depthStencilBufferLabel, 
																							this.backBufferFormatLabel, 
																							this.depthStencilBufferComboBox, 
																							this.vertexProcComboBox, 
																							this.vertexProcLabel, 
																							this.presentIntervalComboBox, 
																							this.presentIntervalLabel}); 
		this.otherSettingsGroupBox.Location = new System.Drawing.Point(16, 264); 
		this.otherSettingsGroupBox.Name = "otherSettingsGroupBox"; 
		this.otherSettingsGroupBox.Size = new System.Drawing.Size(400, 176); 
		this.otherSettingsGroupBox.TabIndex = 2; 
		this.otherSettingsGroupBox.TabStop = false; 
		this.otherSettingsGroupBox.Text = "Device settings"; 
		//  
		// multisampleQualityComboBox 
		//  
		this.multisampleQualityComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.multisampleQualityComboBox.DropDownWidth = 144; 
		this.multisampleQualityComboBox.Location = new System.Drawing.Point(160, 96); 
		this.multisampleQualityComboBox.Name = "multisampleQualityComboBox"; 
		this.multisampleQualityComboBox.Size = new System.Drawing.Size(232, 21); 
		this.multisampleQualityComboBox.TabIndex = 7; 
		this.multisampleQualityComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleQualityChanged); 
		//  
		// multisampleQualityLabel 
		//  
		this.multisampleQualityLabel.Location = new System.Drawing.Point(8, 96); 
		this.multisampleQualityLabel.Name = "multisampleQualityLabel"; 
		this.multisampleQualityLabel.Size = new System.Drawing.Size(152, 23); 
		this.multisampleQualityLabel.TabIndex = 6; 
		this.multisampleQualityLabel.Text = "Multisample &Quality:"; 
		//  
		// multisampleComboBox 
		//  
		this.multisampleComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.multisampleComboBox.DropDownWidth = 144; 
		this.multisampleComboBox.Location = new System.Drawing.Point(160, 72); 
		this.multisampleComboBox.Name = "multisampleComboBox"; 
		this.multisampleComboBox.Size = new System.Drawing.Size(232, 21); 
		this.multisampleComboBox.TabIndex = 5; 
		this.multisampleComboBox.SelectedIndexChanged += new System.EventHandler(this.MultisampleTypeChanged); 
		//  
		// backBufferFormatComboBox 
		//  
		this.backBufferFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.backBufferFormatComboBox.DropDownWidth = 144; 
		this.backBufferFormatComboBox.Location = new System.Drawing.Point(160, 24); 
		this.backBufferFormatComboBox.Name = "backBufferFormatComboBox"; 
		this.backBufferFormatComboBox.Size = new System.Drawing.Size(232, 21); 
		this.backBufferFormatComboBox.TabIndex = 1; 
		this.backBufferFormatComboBox.SelectedIndexChanged += new System.EventHandler(this.BackBufferFormatChanged); 
		//  
		// multisampleLabel 
		//  
		this.multisampleLabel.Location = new System.Drawing.Point(8, 72); 
		this.multisampleLabel.Name = "multisampleLabel"; 
		this.multisampleLabel.Size = new System.Drawing.Size(152, 23); 
		this.multisampleLabel.TabIndex = 4; 
		this.multisampleLabel.Text = "&Multisample Type:"; 
		//  
		// depthStencilBufferLabel 
		//  
		this.depthStencilBufferLabel.Location = new System.Drawing.Point(8, 48); 
		this.depthStencilBufferLabel.Name = "depthStencilBufferLabel"; 
		this.depthStencilBufferLabel.Size = new System.Drawing.Size(152, 23); 
		this.depthStencilBufferLabel.TabIndex = 2; 
		this.depthStencilBufferLabel.Text = "De&pth/Stencil Buffer Format:"; 
		//  
		// backBufferFormatLabel 
		//  
		this.backBufferFormatLabel.Location = new System.Drawing.Point(8, 24); 
		this.backBufferFormatLabel.Name = "backBufferFormatLabel"; 
		this.backBufferFormatLabel.Size = new System.Drawing.Size(152, 23); 
		this.backBufferFormatLabel.TabIndex = 0; 
		this.backBufferFormatLabel.Text = "&Back Buffer Format:"; 
		//  
		// depthStencilBufferComboBox 
		//  
		this.depthStencilBufferComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.depthStencilBufferComboBox.DropDownWidth = 144; 
		this.depthStencilBufferComboBox.Location = new System.Drawing.Point(160, 48); 
		this.depthStencilBufferComboBox.Name = "depthStencilBufferComboBox"; 
		this.depthStencilBufferComboBox.Size = new System.Drawing.Size(232, 21); 
		this.depthStencilBufferComboBox.TabIndex = 3; 
		this.depthStencilBufferComboBox.SelectedIndexChanged += new System.EventHandler(this.DepthStencilBufferFormatChanged); 
		//  
		// vertexProcComboBox 
		//  
		this.vertexProcComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.vertexProcComboBox.DropDownWidth = 121; 
		this.vertexProcComboBox.Location = new System.Drawing.Point(160, 120); 
		this.vertexProcComboBox.Name = "vertexProcComboBox"; 
		this.vertexProcComboBox.Size = new System.Drawing.Size(232, 21); 
		this.vertexProcComboBox.TabIndex = 9; 
		this.vertexProcComboBox.SelectedIndexChanged += new System.EventHandler(this.VertexProcessingChanged); 
		//  
		// vertexProcLabel 
		//  
		this.vertexProcLabel.Location = new System.Drawing.Point(8, 120); 
		this.vertexProcLabel.Name = "vertexProcLabel"; 
		this.vertexProcLabel.Size = new System.Drawing.Size(152, 23); 
		this.vertexProcLabel.TabIndex = 8; 
		this.vertexProcLabel.Text = "&Vertex Processing:"; 
		//  
		// presentIntervalComboBox 
		//  
		this.presentIntervalComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.presentIntervalComboBox.DropDownWidth = 121; 
		this.presentIntervalComboBox.Location = new System.Drawing.Point(160, 144); 
		this.presentIntervalComboBox.Name = "presentIntervalComboBox"; 
		this.presentIntervalComboBox.Size = new System.Drawing.Size(232, 21); 
		this.presentIntervalComboBox.TabIndex = 11; 
		this.presentIntervalComboBox.SelectedValueChanged += new System.EventHandler(this.PresentIntervalChanged); 
		//  
		// presentIntervalLabel 
		//  
		this.presentIntervalLabel.Location = new System.Drawing.Point(8, 144); 
		this.presentIntervalLabel.Name = "presentIntervalLabel"; 
		this.presentIntervalLabel.Size = new System.Drawing.Size(152, 23); 
		this.presentIntervalLabel.TabIndex = 10; 
		this.presentIntervalLabel.Text = "Present &Interval:"; 
		//  
		// resolutionComboBox 
		//  
		this.resolutionComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.resolutionComboBox.DropDownWidth = 144; 
		this.resolutionComboBox.Location = new System.Drawing.Point(161, 94); 
		this.resolutionComboBox.MaxDropDownItems = 14; 
		this.resolutionComboBox.Name = "resolutionComboBox"; 
		this.resolutionComboBox.Size = new System.Drawing.Size(232, 21); 
		this.resolutionComboBox.TabIndex = 5; 
		this.resolutionComboBox.SelectedIndexChanged += new System.EventHandler(this.ResolutionChanged); 
		//  
		// windowedRadioButton 
		//  
		this.windowedRadioButton.Location = new System.Drawing.Point(9, 14); 
		this.windowedRadioButton.Name = "windowedRadioButton"; 
		this.windowedRadioButton.Size = new System.Drawing.Size(152, 24); 
		this.windowedRadioButton.TabIndex = 0; 
		this.windowedRadioButton.Text = "&Windowed"; 
		this.windowedRadioButton.CheckedChanged += new System.EventHandler(this.WindowedFullscreenChanged); 
		//  
		// resolutionLabel 
		//  
		this.resolutionLabel.Location = new System.Drawing.Point(8, 94); 
		this.resolutionLabel.Name = "resolutionLabel"; 
		this.resolutionLabel.Size = new System.Drawing.Size(152, 23); 
		this.resolutionLabel.TabIndex = 4; 
		this.resolutionLabel.Text = "&Resolution:"; 
		//  
		// refreshRateComboBox 
		//  
		this.refreshRateComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.refreshRateComboBox.DropDownWidth = 144; 
		this.refreshRateComboBox.Location = new System.Drawing.Point(161, 118); 
		this.refreshRateComboBox.MaxDropDownItems = 14; 
		this.refreshRateComboBox.Name = "refreshRateComboBox"; 
		this.refreshRateComboBox.Size = new System.Drawing.Size(232, 21); 
		this.refreshRateComboBox.TabIndex = 7; 
		this.refreshRateComboBox.SelectedIndexChanged += new System.EventHandler(this.RefreshRateChanged); 
		//  
		// adapterFormatLabel 
		//  
		this.adapterFormatLabel.Location = new System.Drawing.Point(8, 72); 
		this.adapterFormatLabel.Name = "adapterFormatLabel"; 
		this.adapterFormatLabel.Size = new System.Drawing.Size(152, 23); 
		this.adapterFormatLabel.TabIndex = 2; 
		this.adapterFormatLabel.Text = "Adapter F&ormat:"; 
		//  
		// refreshRateLabel 
		//  
		this.refreshRateLabel.Location = new System.Drawing.Point(8, 118); 
		this.refreshRateLabel.Name = "refreshRateLabel"; 
		this.refreshRateLabel.Size = new System.Drawing.Size(152, 23); 
		this.refreshRateLabel.TabIndex = 6; 
		this.refreshRateLabel.Text = "R&efresh Rate:"; 
		//  
		// okButton 
		//  
		this.okButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
		this.okButton.Location = new System.Drawing.Point(112, 464); 
		this.okButton.Name = "okButton"; 
		this.okButton.TabIndex = 3; 
		this.okButton.Text = "OK"; 
		//  
		// modeSettingsGroupBox 
		//  
		this.modeSettingsGroupBox.Controls.AddRange(new System.Windows.Forms.Control[] { 
																						   this.adapterFormatLabel, 
																						   this.refreshRateLabel, 
																						   this.resolutionComboBox, 
																						   this.adapterFormatComboBox, 
																						   this.resolutionLabel, 
																						   this.refreshRateComboBox, 
																						   this.windowedRadioButton, 
																						   this.fullscreenRadioButton}); 
		this.modeSettingsGroupBox.Location = new System.Drawing.Point(16, 96); 
		this.modeSettingsGroupBox.Name = "modeSettingsGroupBox"; 
		this.modeSettingsGroupBox.Size = new System.Drawing.Size(400, 160); 
		this.modeSettingsGroupBox.TabIndex = 1; 
		this.modeSettingsGroupBox.TabStop = false; 
		this.modeSettingsGroupBox.Text = "Display mode settings"; 
		//  
		// adapterFormatComboBox 
		//  
		this.adapterFormatComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
		this.adapterFormatComboBox.DropDownWidth = 121; 
		this.adapterFormatComboBox.Location = new System.Drawing.Point(161, 70); 
		this.adapterFormatComboBox.MaxDropDownItems = 14; 
		this.adapterFormatComboBox.Name = "adapterFormatComboBox"; 
		this.adapterFormatComboBox.Size = new System.Drawing.Size(232, 21); 
		this.adapterFormatComboBox.TabIndex = 3; 
		this.adapterFormatComboBox.SelectedValueChanged += new System.EventHandler(this.AdapterFormatChanged); 
		//  
		// D3DSettingsForm 
		//  
		this.AcceptButton = this.okButton; 
		this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); 
		this.CancelButton = this.cancelButton; 
		this.ClientSize = new System.Drawing.Size(438, 512); 
		this.Controls.AddRange(new System.Windows.Forms.Control[] { 
																	  this.cancelButton, 
																	  this.okButton, 
																	  this.adapterDeviceGroupBox, 
																	  this.modeSettingsGroupBox, 
																	  this.otherSettingsGroupBox}); 
		this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 
		this.MaximizeBox = false; 
		this.Name = "D3DSettingsForm"; 
		this.Text = "Direct3D Settings"; 
		this.adapterDeviceGroupBox.ResumeLayout(false); 
		this.otherSettingsGroupBox.ResumeLayout(false); 
		this.modeSettingsGroupBox.ResumeLayout(false); 
		this.ResumeLayout(false); 
 
	} 
	#endregion 
 
	///  
	/// Respond to a change of selected adapter by rebuilding the device  
	/// list.  Updating the selected device will trigger updates of the  
	/// rest of the dialog. 
	///  
	private void AdapterChanged(object sender, System.EventArgs e) 
	{ 
		GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; 
		settings.AdapterInfo = adapterInfo; 
 
		// Update device combo box 
		deviceComboBox.Items.Clear(); 
		foreach (GraphicsDeviceInfo deviceInfo in adapterInfo.DeviceInfoList) 
		{ 
			deviceComboBox.Items.Add(deviceInfo); 
			if (deviceInfo.DevType == settings.DevType) 
				deviceComboBox.SelectedItem = deviceInfo; 
		} 
		if (deviceComboBox.SelectedItem == null && deviceComboBox.Items.Count > 0) 
			deviceComboBox.SelectedIndex = 0; 
	} 
 
	///  
	/// Respond to a change of selected device by resetting the  
	/// fullscreen/windowed radio buttons.  Updating these buttons 
	/// will trigger updates of the rest of the dialog. 
	///  
	private void DeviceChanged(object sender, System.EventArgs e) 
	{ 
		GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; 
		GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; 
 
		settings.DeviceInfo = deviceInfo; 
 
		// Update fullscreen/windowed radio buttons 
		bool HasWindowedDeviceCombo = false; 
		bool HasFullscreenDeviceCombo = false; 
		foreach (DeviceCombo deviceCombo in deviceInfo.DeviceComboList) 
		{ 
			if (deviceCombo.IsWindowed) 
				HasWindowedDeviceCombo = true; 
			else 
				HasFullscreenDeviceCombo = true; 
		} 
		windowedRadioButton.Enabled = HasWindowedDeviceCombo; 
		fullscreenRadioButton.Enabled = HasFullscreenDeviceCombo; 
		if (settings.IsWindowed && HasWindowedDeviceCombo) 
		{ 
			windowedRadioButton.Checked = true; 
		} 
		else 
		{ 
			fullscreenRadioButton.Checked = true; 
		} 
		WindowedFullscreenChanged(null, null); 
	} 
 
	///  
	/// Respond to a change of windowed/fullscreen state by rebuilding the 
	/// adapter format list, resolution list, and refresh rate list. 
	/// Updating the selected adapter format will trigger updates of the  
	/// rest of the dialog. 
	///  
	private void WindowedFullscreenChanged(object sender, System.EventArgs e) 
	{ 
		GraphicsAdapterInfo adapterInfo = (GraphicsAdapterInfo)adapterComboBox.SelectedItem; 
		GraphicsDeviceInfo deviceInfo = (GraphicsDeviceInfo)deviceComboBox.SelectedItem; 
 
		if (windowedRadioButton.Checked) 
		{ 
			settings.IsWindowed = true; 
			settings.WindowedAdapterInfo = adapterInfo; 
			settings.WindowedDeviceInfo = deviceInfo; 
 
			// Update adapter format combo box 
			adapterFormatComboBox.Items.Clear(); 
			adapterFormatComboBox.Items.Add(settings.WindowedDisplayMode.Format); 
			adapterFormatComboBox.SelectedIndex = 0; 
			adapterFormatComboBox.Enabled = false; 
 
			// Update resolution combo box 
			resolutionComboBox.Items.Clear(); 
			resolutionComboBox.Items.Add(FormatResolution(settings.WindowedDisplayMode.Width,  
				settings.WindowedDisplayMode.Height)); 
			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; 
		} 
	} 
 
	///  
	/// Converts the given width and height into a formatted string 
	///  
	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(); 
	} 
 
	///  
	/// Converts the given refresh rate into a formatted string 
	///  
	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(); 
		} 
	} 
 
	///  
	/// 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. 
	///  
	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; 
	} 
 
	///  
	/// Respond to a change of selected resolution by rebuilding the 
	/// refresh rate list. 
	///  
	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; 
	} 
 
	///  
	/// Respond to a change of selected refresh rate. 
	///  
	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; 
	} 
 
	///  
	/// Respond to a change of selected back buffer format by rebuilding 
	/// the depth/stencil format list, multisample type list, and vertex 
	/// processing type list. 
	///  
	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; 
			} 
		} 
	} 
 
	///  
	/// Respond to a change of selected depth/stencil buffer format. 
	///  
	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; 
 
	} 
 
	///  
	/// Respond to a change of selected multisample type. 
	///  
	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; 
	} 
 
	///  
	/// Respond to a change of selected multisample quality. 
	///  
	private void MultisampleQualityChanged(object sender, System.EventArgs e) 
	{ 
		settings.MultisampleQuality = (int)multisampleQualityComboBox.SelectedItem; 
	} 
 
	///  
	/// Respond to a change of selected vertex processing type. 
	///  
	private void VertexProcessingChanged(object sender, System.EventArgs e) 
	{ 
		settings.VertexProcessingType = (VertexProcessingType)vertexProcComboBox.SelectedItem; 
	} 
 
	///  
	/// Respond to a change of selected vertex processing type. 
	///  
	private void PresentIntervalChanged(object sender, System.EventArgs e) 
	{ 
		settings.PresentInterval = (PresentInterval)presentIntervalComboBox.SelectedItem; 
	} 
}