#region --- License --- /* Copyright (c) 2006, 2007 Stefanos Apostolopoulos * See license.txt for license info */ #endregion #region --- Using directives --- using System; using System.Drawing; using System.Globalization; #endregion namespace OpenTK { using OpenTK.Graphics; /// Defines the display mode for a render window. public sealed class DisplayMode { #region --- Private Variables --- private int width, height; private ColorMode color_format, auxilliary_color_format; private int depthBits, stencilBits; private float refreshRate; private bool vsync; private bool fullscreen; private int buffers; private bool stereo; #endregion #region --- Constructors --- /// /// Constructs a new DisplayMode from the given DisplayMode. /// /// public DisplayMode(DisplayMode mode) : this(mode.ColorFormat, mode.Depth, mode.Stencil, mode.AuxilliaryColorFormat, mode.Buffers, mode.Stereo) { } /// Constructs a new DisplayMode with sensible default parameters. public DisplayMode() : this(DisplayDevice.PrimaryDisplay.BitsPerPixel, 16, 0, 0, 2, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. public DisplayMode(ColorMode color) : this(color, 16, 0, 0, 2, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. public DisplayMode(ColorMode color, int depth) : this(color, depth, 0, 0, 2, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. public DisplayMode(ColorMode color, int depth, int stencil) : this(color, depth, stencil, 0, 2, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The ColorMode of the auxilliary buffer. public DisplayMode(ColorMode color, int depth, int stencil, ColorMode aux) : this(color, depth, stencil, aux, 2, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The ColorMode of the auxilliary buffer. /// The number of render buffers. Typical values include one (single-), two (double-) or three (triple-buffering). public DisplayMode(ColorMode color, int depth, int stencil, ColorMode aux, int buffers) : this(color, depth, stencil, aux, buffers, false) { } /// Constructs a new DisplayMode with the specified parameters. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The ColorMode of the auxilliary buffer. /// Set to true for a DisplayMode with stereographic capabilities. /// The number of render buffers. Typical values include one (single-), two (double-) or three (triple-buffering). public DisplayMode(ColorMode color, int depth, int stencil, ColorMode aux, int buffers, bool stereo) { this.ColorFormat = color; this.Depth = depth; this.Stencil = stencil; this.AuxilliaryColorFormat = aux; this.Buffers = buffers; this.Stereo = stereo; } #region Obsolete Constructors /// /// Constructs a new DisplayMode from the specified parameters. /// /// The Width of the DisplayMode, in pixels. /// The Height of the DisplayMode, in pixels. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The number of bits in the auxilliary buffer. /// Set to true for a fullscreen DisplayMode. /// Set to true for a DisplayMode with stereographic capabilities. /// The number of render buffers. Typical values include one (single-), two (double-) or three (triple-buffering). /// Set to true to sync the updates to the screen refresh rate. /// The desired RefreshRate. Taken into account only for Fullscreen DisplayModes. [Obsolete] public DisplayMode(int width, int height, ColorMode color, int depth, int stencil, int aux, int buffers, bool fullscreen, bool stereo, bool vsync, float refresh) { this.Width = width; this.Height = height; this.Color = color; this.DepthBits = depth; this.StencilBits = stencil; this.AuxBits = aux; this.Buffers = buffers; this.Fullscreen = fullscreen; this.Stereo = stereo; this.Vsync = vsync; this.RefreshRate = refresh; } /// /// Constructs a new DisplayMode. /// /// The Width of the DisplayMode in pixels. /// The Height of the DisplayMode in pixels. [Obsolete] public DisplayMode(int width, int height) : this(width, height, DisplayDevice.PrimaryDisplay.BitsPerPixel, 16, 0, 0, 0, false, false, false, 0.0f) { } /// /// Constructs a new DisplayMode. /// /// The Width of the DisplayMode in pixels. /// The Height of the DisplayMode in pixels. /// The ColorMode of the color buffer. [Obsolete] public DisplayMode(int width, int height, ColorMode color) : this(width, height, color, 16, 0, 0, 0, false, false, false, 0.0f) { } /// /// Constructs a new DisplayMode. /// /// The Width of the DisplayMode in pixels. /// The Height of the DisplayMode in pixels. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. [Obsolete] public DisplayMode(int width, int height, ColorMode color, int depth) : this(width, height, color, depth, 0, 0, 0, false, false, false, 0.0f) { } /// /// Constructs a new DisplayMode. /// /// The Width of the DisplayMode in pixels. /// The Height of the DisplayMode in pixels. /// The ColorMode of the color buffer. /// The number of bits in the depth buffer. /// True for a fullscreen DisplayMode, false otherwise. [Obsolete] public DisplayMode(int width, int height, ColorMode color, int depth, bool fullscreen) : this(width, height, color, depth, 0, 0, 0, fullscreen, false, false, 0.0f) { } #endregion #endregion #region --- Public Properties --- #region public int ColorFormat /// /// Gets an OpenTK.Graphics.ColorMode that describes the color format of this DisplayMode. /// public ColorMode ColorFormat { get { return color_format; } private set { color_format = value; } } #endregion #region public int AuxilliaryColorFormat /// /// Gets an OpenTK.Graphics.ColorMode that describes the color format of this DisplayMode. /// public ColorMode AuxilliaryColorFormat { get { return auxilliary_color_format; } private set { auxilliary_color_format = value; } } #endregion #region public int Depth /// /// Gets a System.Int32 that contains the bits per pixel for the depth buffer /// of this DisplayMode. /// public int Depth { get { return depthBits; } private set { depthBits = value; } } #endregion #region public int Stencil /// /// Gets a System.Int32 that contains the bits per pixel for the stencil buffer /// of this DisplayMode. /// public int Stencil { get { return stencilBits; } private set { stencilBits = value; } } #endregion #region public bool Stereo /// /// Gets a System.Boolean indicating whether this DisplayMode is stereoscopic. /// public bool Stereo { get { return this.stereo; } private set { this.stereo = value; } } #endregion #region public int Buffers /// /// Gets a System.Int32 containing the number of buffers associated with this /// DisplayMode. /// public int Buffers { get { return this.buffers; } private set { this.buffers = value; } } #endregion #region Obsolete Properties [Obsolete("Use GameWindow.Fullscreen instead.")] public bool Fullscreen { get { return this.fullscreen; } internal set { this.fullscreen = value; } } [Obsolete("Use GraphicsContext.VSync, GLControl.VSync or GameWindow.VSync instead.")] public bool Vsync { get { return this.vsync; } internal set { this.vsync = value; } } [Obsolete("Use OpenTK.Graphics.Display.RefreshRate instead.")] public float RefreshRate { get { return this.refreshRate; } private set { this.refreshRate = value; } } #region public ColorDepth Color [Obsolete("Use DisplayMode.ColorFormat instead.")] public ColorMode Color { get { return this.color_format; } internal set { this.color_format = value; } } #endregion #region public int Height /// /// Gets or sets the Height of the DisplayMode. Height is the vertical span measured in pixels. /// [Obsolete("Use GameWindow.Height or GLControl.Height instead.")] public int Height { get { return height; } set { if (value > 0 /* && (value < Screen[0].Height) */) { height = value; } } } #endregion #region public int Width /// /// Gets or sets the Width of the DisplayMode. Width is the horizontal span measured in pixels. /// [Obsolete("Use GameWindow.Width or GLControl.Width instead.")] public int Width { get { return width; } set { if (value > 0) { width = value; } } } #endregion [Obsolete("Use DisplayMode.Depth instead.")] public int DepthBits { get { return this.depthBits; } internal set { this.depthBits = value; } } [Obsolete("Use DisplayMode.Stencil instead.")] public int StencilBits { get { return this.stencilBits; } internal set { this.stencilBits = value; } } [Obsolete("Use DisplayMode.AuxilliaryColorFormat instead.")] public int AuxBits { get { return this.AuxilliaryColorFormat.BitsPerPixel; } internal set { this.AuxilliaryColorFormat = value; } } #endregion #endregion #region --- Overrides --- /// /// Describes this DisplayMode instance. /// /// Returns a System.String that describes this DisplayMode instance. public override string ToString() { return string.Format("Display Mode: {0}, depth: {1}, stencil {2}, aux {3} refresh {4}Hz", Color.ToString(), DepthBits, StencilBits, AuxBits, RefreshRate ); } #endregion } public class DisplayModeMatchOptions { } }