diff --git a/Source/OpenTK/Graphics/GraphicsMode.cs b/Source/OpenTK/Graphics/GraphicsMode.cs
new file mode 100644
index 00000000..eab963ba
--- /dev/null
+++ b/Source/OpenTK/Graphics/GraphicsMode.cs
@@ -0,0 +1,263 @@
+#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
+ }
+}