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

📄 d3dsettingsform.cs

📁 Particle System Test Application on C#
💻 CS
📖 第 1 页 / 共 3 页
字号:
		// 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 + -