Files
LuaCsForBarotraumaEP/Libraries/MonoGame.Framework/Src/MonoGame.Framework/Graphics/PresentationParameters.cs
2019-06-25 16:00:44 +03:00

240 lines
7.2 KiB
C#

// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.
using System;
#if WINDOWS_UAP
using Windows.UI.Xaml.Controls;
#endif
#if IOS
using UIKit;
using Microsoft.Xna.Framework.Input.Touch;
#endif
namespace Microsoft.Xna.Framework.Graphics
{
public class PresentationParameters
{
#region Constants
public const int DefaultPresentRate = 60;
#endregion Constants
#region Private Fields
private DepthFormat depthStencilFormat;
private SurfaceFormat backBufferFormat;
private int backBufferHeight = GraphicsDeviceManager.DefaultBackBufferHeight;
private int backBufferWidth = GraphicsDeviceManager.DefaultBackBufferWidth;
private IntPtr deviceWindowHandle;
private int multiSampleCount;
private bool disposed;
private bool isFullScreen;
private bool hardwareModeSwitch = true;
#endregion Private Fields
#region Constructors
/// <summary>
/// Create a <see cref="PresentationParameters"/> instance with default values for all properties.
/// </summary>
public PresentationParameters()
{
Clear();
}
#endregion Constructors
#region Properties
/// <summary>
/// Get or set the format of the back buffer.
/// </summary>
public SurfaceFormat BackBufferFormat
{
get { return backBufferFormat; }
set { backBufferFormat = value; }
}
/// <summary>
/// Get or set the height of the back buffer.
/// </summary>
public int BackBufferHeight
{
get { return backBufferHeight; }
set { backBufferHeight = value; }
}
/// <summary>
/// Get or set the width of the back buffer.
/// </summary>
public int BackBufferWidth
{
get { return backBufferWidth; }
set { backBufferWidth = value; }
}
/// <summary>
/// Get the bounds of the back buffer.
/// </summary>
public Rectangle Bounds
{
get { return new Rectangle(0, 0, backBufferWidth, backBufferHeight); }
}
/// <summary>
/// Get or set the handle of the window that will present the back buffer.
/// </summary>
public IntPtr DeviceWindowHandle
{
get { return deviceWindowHandle; }
set { deviceWindowHandle = value; }
}
#if WINDOWS_UAP
[CLSCompliant(false)]
public SwapChainPanel SwapChainPanel { get; set; }
#endif
/// <summary>
/// Get or set the depth stencil format for the back buffer.
/// </summary>
public DepthFormat DepthStencilFormat
{
get { return depthStencilFormat; }
set { depthStencilFormat = value; }
}
/// <summary>
/// Get or set a value indicating if we are in full screen mode.
/// </summary>
public bool IsFullScreen
{
get
{
return isFullScreen;
}
set
{
isFullScreen = value;
#if IOS && !TVOS
UIApplication.SharedApplication.StatusBarHidden = isFullScreen;
#endif
}
}
/// <summary>
/// If <code>true</code> the <see cref="GraphicsDevice"/> will do a mode switch
/// when going to full screen mode. If <code>false</code> it will instead do a
/// soft full screen by maximizing the window and making it borderless.
/// </summary>
public bool HardwareModeSwitch
{
get { return hardwareModeSwitch; }
set { hardwareModeSwitch = value; }
}
/// <summary>
/// Get or set the multisample count for the back buffer.
/// </summary>
public int MultiSampleCount
{
get { return multiSampleCount; }
set { multiSampleCount = value; }
}
/// <summary>
/// Get or set the presentation interval.
/// </summary>
public PresentInterval PresentationInterval { get; set; }
/// <summary>
/// Get or set the display orientation.
/// </summary>
public DisplayOrientation DisplayOrientation
{
get;
set;
}
/// <summary>
/// Get or set the RenderTargetUsage for the back buffer.
/// Determines if the back buffer is cleared when it is set as the
/// render target by the <see cref="GraphicsDevice"/>.
/// <see cref="GraphicsDevice"/> target.
/// </summary>
public RenderTargetUsage RenderTargetUsage { get; set; }
#endregion Properties
#region Methods
/// <summary>
/// Reset all properties to their default values.
/// </summary>
public void Clear()
{
backBufferFormat = SurfaceFormat.Color;
#if IOS
// Mainscreen.Bounds does not account for the device's orientation. it ALWAYS assumes portrait
var width = (int)(UIScreen.MainScreen.Bounds.Width * UIScreen.MainScreen.Scale);
var height = (int)(UIScreen.MainScreen.Bounds.Height * UIScreen.MainScreen.Scale);
// Flip the dimensions if we need to.
if (TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeLeft ||
TouchPanel.DisplayOrientation == DisplayOrientation.LandscapeRight)
{
width = height;
height = (int)(UIScreen.MainScreen.Bounds.Width * UIScreen.MainScreen.Scale);
}
backBufferWidth = width;
backBufferHeight = height;
#else
backBufferWidth = GraphicsDeviceManager.DefaultBackBufferWidth;
backBufferHeight = GraphicsDeviceManager.DefaultBackBufferHeight;
#endif
deviceWindowHandle = IntPtr.Zero;
#if IOS && !TVOS
isFullScreen = UIApplication.SharedApplication.StatusBarHidden;
#else
// isFullScreen = false;
#endif
depthStencilFormat = DepthFormat.None;
multiSampleCount = 0;
PresentationInterval = PresentInterval.Default;
DisplayOrientation = Microsoft.Xna.Framework.DisplayOrientation.Default;
}
/// <summary>
/// Create a copy of this <see cref="PresentationParameters"/> instance.
/// </summary>
/// <returns></returns>
public PresentationParameters Clone()
{
PresentationParameters clone = new PresentationParameters();
clone.backBufferFormat = this.backBufferFormat;
clone.backBufferHeight = this.backBufferHeight;
clone.backBufferWidth = this.backBufferWidth;
clone.deviceWindowHandle = this.deviceWindowHandle;
clone.depthStencilFormat = this.depthStencilFormat;
clone.IsFullScreen = this.IsFullScreen;
clone.HardwareModeSwitch = this.HardwareModeSwitch;
clone.multiSampleCount = this.multiSampleCount;
clone.PresentationInterval = this.PresentationInterval;
clone.DisplayOrientation = this.DisplayOrientation;
clone.RenderTargetUsage = this.RenderTargetUsage;
return clone;
}
#endregion Methods
}
}