#region --- License --- /* Licensed under the MIT/X11 license. * Copyright (c) 2006-2008 the OpenTK Team. * This notice may not be removed from any source distribution. * See license.txt for licensing detailed licensing details. */ #endregion using System; using System.Collections.Generic; using System.Text; namespace OpenTK.Graphics { /// Defines the format for graphics operations. public class GraphicsMode { ColorDepth color_format, accumulator_format; int depth, stencil, buffers, samples; bool stereo; #region --- Constructors --- #region internal GraphicsFormat(GraphicsFormat mode) /// /// Constructs a new GraphicsFormat from the given GraphicsFormat. /// internal GraphicsMode(GraphicsMode mode) : this(mode.ColorFormat, mode.Depth, mode.Stencil, mode.Samples, mode.AccumulatorFormat, mode.Buffers, mode.Stereo) { } #endregion #region public GraphicsFormat() /// Constructs a new GraphicsFormat with sensible default parameters. public GraphicsMode() : this(Default) { } #endregion #region public GraphicsFormat(ColorFormat color) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. public GraphicsMode(ColorDepth color) : this(color, Default.Depth, Default.Stencil, Default.Samples, Default.AccumulatorFormat, Default.Buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. public GraphicsMode(ColorDepth color, int depth) : this(color, depth, Default.Stencil, Default.Samples, Default.AccumulatorFormat, Default.Buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth, int stencil) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. public GraphicsMode(ColorDepth color, int depth, int stencil) : this(color, depth, stencil, Default.Samples, Default.AccumulatorFormat, Default.Buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth, int stencil, int samples) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The number of samples for FSAA. public GraphicsMode(ColorDepth color, int depth, int stencil, int samples) : this(color, depth, stencil, samples, Default.AccumulatorFormat, Default.Buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The number of samples for FSAA. /// The ColorFormat of the accumilliary buffer. public GraphicsMode(ColorDepth color, int depth, int stencil, int samples, ColorDepth accum) : this(color, depth, stencil, samples, accum, Default.Buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The number of samples for FSAA. /// The ColorFormat of the accumilliary buffer. /// The number of render buffers. Typical values include one (single-), two (double-) or three (triple-buffering). public GraphicsMode(ColorDepth color, int depth, int stencil, int samples, ColorDepth accum, int buffers) : this(color, depth, stencil, samples, accum, buffers, Default.Stereo) { } #endregion #region public GraphicsFormat(ColorFormat color, int depth, int stencil, int samples, ColorFormat accum, int buffers, bool stereo) /// Constructs a new GraphicsFormat with the specified parameters. /// The ColorFormat of the color buffer. /// The number of bits in the depth buffer. /// The number of bits in the stencil buffer. /// The number of samples for FSAA. /// The ColorFormat of the accumilliary buffer. /// Set to true for a GraphicsFormat with stereographic capabilities. /// The number of render buffers. Typical values include one (single-), two (double-) or three (triple-buffering). public GraphicsMode(ColorDepth color, int depth, int stencil, int samples, ColorDepth accum, int buffers, bool stereo) { if (depth < 0) throw new ArgumentOutOfRangeException("depth", "Must be greater than, or equal to zero."); if (stencil < 0) throw new ArgumentOutOfRangeException("stencil", "Must be greater than, or equal to zero."); if (buffers <= 0) throw new ArgumentOutOfRangeException("buffers", "Must be greater than zero."); if (samples < 0) throw new ArgumentOutOfRangeException("samples", "Must be greater than, or equal to zero."); this.ColorFormat = color; this.Depth = depth; this.Stencil = stencil; this.AccumulatorFormat = accum; this.Buffers = buffers; this.Stereo = stereo; } #endregion #endregion #region --- Public Methods --- #region public int ColorFormat /// /// Gets an OpenTK.Graphics.ColorFormat that describes the color format for this GraphicsFormat. /// public ColorDepth ColorFormat { get { return color_format; } private set { color_format = value; } } #endregion #region public int AccumulatorFormat /// /// Gets an OpenTK.Graphics.ColorFormat that describes the accumulator format for this GraphicsFormat. /// public ColorDepth AccumulatorFormat { get { return accumulator_format; } private set { accumulator_format = value; } } #endregion #region public int Depth /// /// Gets a System.Int32 that contains the bits per pixel for the depth buffer /// for this GraphicsFormat. /// public int Depth { get { return depth; } private set { depth = value; } } #endregion #region public int Stencil /// /// Gets a System.Int32 that contains the bits per pixel for the stencil buffer /// of this GraphicsFormat. /// public int Stencil { get { return stencil; } private set { stencil = value; } } #endregion /// /// Gets a System.Int32 that contains the number of FSAA samples per pixel for this GraphicsFormat. /// public int Samples { get { return samples; } private set { samples = value; } } #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 public static GraphicsFormat Default /// Returns an OpenTK.GraphicsFormat compatible with the underlying platform. public static GraphicsMode Default { get { return new GraphicsMode(DisplayDevice.PrimaryDisplay.BitsPerPixel, 16, 0, 0, 0, 2, false); } } #endregion #endregion #region --- Overrides --- /// Returns a System.String describing the current GraphicsFormat. /// ! System.String describing the current GraphicsFormat. public override string ToString() { return String.Format("Color: {0}, Depth: {1}, Stencil: {2}, Samples: {3}, Accum: {4}, Buffers: {5}, Stereo: {6}", ColorFormat, Depth, Stereo, Samples, AccumulatorFormat, Buffers, Stereo); } #endregion } }