using System; using System.Collections.Generic; using System.Text; using Microsoft.DirectX; using Microsoft.DirectX.Direct3D; using System.Collections; using System.Windows.Forms; using System.Drawing; namespace section3 { class Program { static void Main1(string[] args) { foreach (AdapterInformation adapter in Manager.Adapters) { if (adapter.Equals(Manager.Adapters.Default)) { Console.WriteLine("这是默认适配器"); } Console.WriteLine("" + adapter.Information.ToString() + "\n\nDisplay Modes:\n"); foreach (DisplayMode display in adapter.SupportedDisplayModes) { Console.WriteLine("{0}x{1}:{2}@{3}Hz", display.Width, display.Height, display.Format, display.RefreshRate); } Console.WriteLine("\n目前的显示模式是:{0}x{1}:{2}@{3}Hz", adapter.CurrentDisplayMode.Width, adapter.CurrentDisplayMode.Height, adapter.CurrentDisplayMode.Format, adapter.CurrentDisplayMode.RefreshRate); Console.WriteLine("\n\n"); } Console.WriteLine("=========================================================================="); AdapterInformation ai = Manager.Adapters.Default; Caps caps = Manager.GetDeviceCaps(ai.Adapter, DeviceType.Hardware); if (caps.TextureCaps.SupportsSquareOnly) { Console.WriteLine("Square textures only 支持"); } DeviceType[] deviceTypes = new DeviceType[] { DeviceType.Hardware, DeviceType.Software, DeviceType.Reference }; Format[] backBufferFormats = new Format[] { Format.A8R8G8B8, Format.X8R8G8B8, Format.A2R10G10B10, Format.R5G6B5, Format.A1R5G5B5, Format.X1R5G5B5 }; bool[] windowModes = new bool[] { true, false }; // For each adapter foreach (AdapterInformation adapter in Manager.Adapters) { ArrayList adapterFormats = new ArrayList(); // Build the list of adapter formats foreach (DisplayMode dispMode in adapter.SupportedDisplayModes) { if (!adapterFormats.Contains(dispMode.Format)) adapterFormats.Add(dispMode.Format); } foreach (DeviceType deviceType in deviceTypes) { foreach (Format adapterFormat in adapterFormats) { foreach (Format backBufferFormat in backBufferFormats) { foreach (bool windowMode in windowModes) { if (Manager.CheckDeviceType( adapter.Adapter, deviceType, adapterFormat, backBufferFormat, windowMode)) { // *** This combination is valid! } } // windowMode } // backBufferFormat } // adapterFormat } // deviceType } // adapter caps = Manager.GetDeviceCaps(Manager.Adapters.Default.Adapter, DeviceType.Hardware); if (caps.DeviceCaps.SupportsHardwareTransformAndLight) { if (caps.DeviceCaps.SupportsPureDevice) { Console.WriteLine("Pure Device"); } Console.WriteLine("Hardware Vertex Processing"); Console.WriteLine("Mixed Vertex Processing"); } Console.WriteLine("Software Vertex Processing"); DepthFormat[] depthStencilFormats = new DepthFormat[]{ DepthFormat.D16, DepthFormat.D15S1, DepthFormat.D24X8, DepthFormat.D24S8, DepthFormat.D24X4S4, DepthFormat.D32, }; /* foreach (DepthFormat depthStencilFormat in depthStencilFormats) { if (Manager.CheckDeviceFormat(adapter, deviceType, adapterFormat, Usage.DepthStencil, ResourceType.Surface, depthStencilFormat)) { if (Manager.CheckDepthStencilMatch(adapter, deviceType, adapterFormat, backbufferFormat, depthStencilFormat)) { // This depth stencil format is compatible } } } */ // Assumes you have: // // AdapterInformation adapter; // DeviceType deviceType; // CreateFlags createFlags; // DisplayMode displayMode; // Format backbufferFormat; // bool windowed; PresentParameters presentation = new PresentParameters(); /* presentation.BackBufferFormat = backbufferFormat; presentation.BackBufferWidth = displayMode.Width; presentation.BackBufferHeight = displayMode.Height; presentation.SwapEffect = SwapEffect.Flip; presentation.Windowed = windowed; Device device = new Device( adapter.Adapter, DeviceType.Hardware, this, createFlags, presentation); Console.ReadLine(); } } */ } public class MainForm : Form { Device device = null; /// <summary> /// When the form is clicked, we close it and stop /// the application /// </summary> protected override void OnClick(EventArgs e) { this.Close(); base.OnClick(e); } /// <summary> /// In the constructor we initialize the device using /// the default adapter and the current display mode /// </summary> public MainForm() { AdapterInformation adapter = Manager.Adapters.Default; PresentParameters presentation = new PresentParameters(); presentation.BackBufferFormat = adapter.CurrentDisplayMode.Format; presentation.BackBufferWidth = adapter.CurrentDisplayMode.Width; presentation.BackBufferHeight = adapter.CurrentDisplayMode.Height; presentation.SwapEffect = SwapEffect.Flip; presentation.Windowed = false; // Place it in a try catch block just //in case it goes wrong for // some reason. try { // To make things simple, we'll just //use the reference device, and // software vertex processing. //Although this will be extrelemly slow // it doesn't matter in this case. // It will definetly work on // all machines, so it saves us doing //enumeration for now. device = new Device(adapter.Adapter, DeviceType.Reference, this, CreateFlags.SoftwareVertexProcessing, presentation); } catch (DirectXException e) { MessageBox.Show(e.Message); return; } } /// <summary> /// Clear the screen with a blue color /// </summary> public void Render() { device.Clear(ClearFlags.Target,System.Drawing.Color.AntiqueWhite, 1.0f, 0); device.Present(); } /// <summary> /// The entry point where the main render loop goes /// </summary> static void Main() { using (MainForm form = new MainForm()) { form.Show(); while (form.Created) { form.Render(); Application.DoEvents(); } } } } } }