Show More
Commit Description:
Add timers for Simulation and various engines...
Commit Description:
Add timers for Simulation and various engines Starting to add additional timers for different stages of the process of updating in order to get more insight into what is slowing it down. The update takes 9ms, which is much longer than it used to. Engine-specific timers are coming later.
File last commit:
Show/Diff file:
Action:
FNA/src/Graphics/GraphicsAdapter.cs
254 lines | 5.0 KiB | text/x-csharp | CSharpLexer
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
* Copyright 2009-2020 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
{
return FNAPlatform.GetCurrentDisplayMode(
Adapters.IndexOf(this)
);
}
}
public DisplayModeCollection SupportedDisplayModes
{
get;
private set;
}
public string Description
{
get;
private set;
}
public int DeviceId
{
get
{
throw new NotImplementedException();
}
}
public string DeviceName
{
get;
private set;
}
public bool IsDefaultAdapter
{
get
{
return this == DefaultAdapter;
}
}
/// <summary>
/// Gets a <see cref="System.Boolean"/> indicating whether
/// <see cref="GraphicsAdapter.CurrentDisplayMode"/> has a
/// Width:Height ratio corresponding to a widescreen <see cref="DisplayMode"/>.
/// Common widescreen modes include 16:9, 16:10 and 2:1.
/// </summary>
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<GraphicsAdapter> Adapters
{
get
{
if (adapters == null)
{
adapters = new ReadOnlyCollection<GraphicsAdapter>(
FNAPlatform.GetGraphicsAdapters()
);
}
return adapters;
}
}
#endregion
#region Private Static Variables
private static ReadOnlyCollection<GraphicsAdapter> adapters;
#endregion
#region Internal Constructor
internal GraphicsAdapter(
DisplayModeCollection modes,
string name,
string description
) {
SupportedDisplayModes = modes;
DeviceName = name;
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
) {
/* Per the OpenGL 3.0 Specification, section 3.9.1,
* under "Required Texture Formats". These are the
* formats required for renderbuffer support.
*
* TODO: Per the 4.5 Specification, section 8.5.1,
* RGB565, RGB5_A1, RGBA4 are also supported.
* -flibit
*/
if ( format != SurfaceFormat.Color &&
format != SurfaceFormat.Rgba1010102 &&
format != SurfaceFormat.Rg32 &&
format != SurfaceFormat.Rgba64 &&
format != SurfaceFormat.Single &&
format != SurfaceFormat.Vector2 &&
format != SurfaceFormat.Vector4 &&
format != SurfaceFormat.HalfSingle &&
format != SurfaceFormat.HalfVector2 &&
format != SurfaceFormat.HalfVector4 &&
format != SurfaceFormat.HdrBlendable )
{
selectedFormat = SurfaceFormat.Color;
}
else
{
selectedFormat = format;
}
selectedDepthFormat = depthFormat;
selectedMultiSampleCount = 0; // Okay, sure, sorry.
return ( format == selectedFormat &&
depthFormat == selectedDepthFormat &&
multiSampleCount == selectedMultiSampleCount );
}
public bool QueryBackBufferFormat(
GraphicsProfile graphicsProfile,
SurfaceFormat format,
DepthFormat depthFormat,
int multiSampleCount,
out SurfaceFormat selectedFormat,
out DepthFormat selectedDepthFormat,
out int selectedMultiSampleCount)
{
selectedFormat = SurfaceFormat.Color; // Seriously?
selectedDepthFormat = depthFormat;
selectedMultiSampleCount = 0; // Okay, sure, sorry.
return ( format == selectedFormat &&
depthFormat == selectedDepthFormat &&
multiSampleCount == selectedMultiSampleCount );
}
#endregion
}
}