#region License /* FNA - XNA4 Reimplementation for Desktop Platforms * Copyright 2009-2016 Ethan Lee and the MonoGame Team * * Released under the Microsoft Public License. * See LICENSE for details. */ #endregion #region Using Statements using System; using System.Collections.ObjectModel; #endregion namespace Microsoft.Xna.Framework.Graphics { public sealed class GraphicsAdapter { #region Public Properties public DisplayMode CurrentDisplayMode { get; private set; } public DisplayModeCollection SupportedDisplayModes { get; private set; } public string Description { get; private set; } public int DeviceId { get { throw new NotImplementedException(); } } public string DeviceName { get { throw new NotImplementedException(); } } public bool IsDefaultAdapter { get { return this == DefaultAdapter; } } /// /// Gets a indicating whether /// has a /// Width:Height ratio corresponding to a widescreen . /// Common widescreen modes include 16:9, 16:10 and 2:1. /// public bool IsWideScreen { get { /* Common non-widescreen modes: 4:3, 5:4, 1:1 * Common widescreen modes: 16:9, 16:10, 2:1 * XNA does not appear to account for rotated displays on the desktop */ const float limit = 4.0f / 3.0f; float aspect = CurrentDisplayMode.AspectRatio; return aspect > limit; } } public IntPtr MonitorHandle { get { throw new NotImplementedException(); } } public int Revision { get { throw new NotImplementedException(); } } public int SubSystemId { get { throw new NotImplementedException(); } } public bool UseNullDevice { get; set; } public bool UseReferenceDevice { get; set; } public int VendorId { get { throw new NotImplementedException(); } } #endregion #region Public Static Properties public static GraphicsAdapter DefaultAdapter { get { return Adapters[0]; } } public static ReadOnlyCollection Adapters { get { if (adapters == null) { adapters = new ReadOnlyCollection( FNAPlatform.GetGraphicsAdapters() ); } return adapters; } } #endregion #region Private Static Variables private static ReadOnlyCollection adapters; #endregion #region Internal Constructor internal GraphicsAdapter( DisplayMode currentMode, DisplayModeCollection modes, string description ) { CurrentDisplayMode = currentMode; SupportedDisplayModes = modes; Description = description; UseNullDevice = false; UseReferenceDevice = false; } #endregion #region Public Methods public bool IsProfileSupported(GraphicsProfile graphicsProfile) { /* TODO: This method could be genuinely useful! * Maybe look into the difference between Reach/HiDef and add the * appropriate properties to the GLDevice. * -flibit */ return true; } public bool QueryRenderTargetFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { throw new NotImplementedException(); } public bool QueryBackBufferFormat( GraphicsProfile graphicsProfile, SurfaceFormat format, DepthFormat depthFormat, int multiSampleCount, out SurfaceFormat selectedFormat, out DepthFormat selectedDepthFormat, out int selectedMultiSampleCount) { /* FIXME: MultiSampleCount could actually be dynamic. * However, the rest is essentially what we decide when doing * the faux-backbuffer, so here's me caring. * -flibit */ selectedFormat = SurfaceFormat.Color; // Seriously? selectedDepthFormat = depthFormat; selectedMultiSampleCount = 0; // Okay, sure, sorry. return ( format == selectedFormat && depthFormat == selectedDepthFormat && multiSampleCount == selectedMultiSampleCount ); } #endregion } }