#region --- License --- /* Copyright (c) 2006, 2007 Stefanos Apostolopoulos * See license.txt for license info */ #endregion using System; using System.Collections.Generic; using System.Text; using OpenTK.Platform; namespace OpenTK { /// /// Represents and provides methods to manipulate an OpenGL render context. /// public class GLContext : IGLContext { /// /// The actual render context implementation for the underlying platform. /// private IGLContext implementation; /// /// Constructs a new GLContext with the specified DisplayMode, and bound to the specified IWindowInfo. /// /// /// public GLContext(DisplayMode mode, IWindowInfo window) { switch (Environment.OSVersion.Platform) { case PlatformID.Unix: case (PlatformID)128: implementation = new OpenTK.Platform.X11.X11GLContext(mode, window); break; case PlatformID.Win32NT: case PlatformID.Win32S: case PlatformID.Win32Windows: case PlatformID.WinCE: implementation = new OpenTK.Platform.Windows.WinGLContext(mode, window); break; default: throw new PlatformNotSupportedException("Your platform is not supported currently. Please, refer to http://opentk.sourceforge.net for more information."); } } #region --- IGLContext Members --- /// /// Gets a handle to the OpenGL rendering context. /// public IntPtr Context { get { return implementation.Context; } } /// /// Gets the IWindowInfo describing the window associated with this context. /// public IWindowInfo Info { get { return implementation.Info; } } /// /// Gets the DisplayMode of the context. /// public DisplayMode Mode { get { return implementation.Mode; } } /// /// Creates an OpenGL context. /// public void CreateContext() { implementation.CreateContext(); } /// /// Creates an OpenGL context with a direct or indirect rendering mode. This parameter is ignored /// on Windows platforms (direct mode only). /// /// Set to true for direct rendering or false otherwise. /// /// /// Direct rendering is the default rendering mode for OpenTK, since it can provide higher performance /// in some circumastances. /// /// /// The 'direct' parameter is a hint, and will ignored if the specified mode is not supported (e.g. setting /// indirect rendering on Windows platforms). /// /// public void CreateContext(bool direct) { implementation.CreateContext(direct); } /// /// Creates an OpenGL context with the specified direct/indirect rendering mode and sharing state with the /// specified IGLContext. /// /// Set to true for direct rendering or false otherwise. /// The source IGLContext to share state from.. /// public void CreateContext(bool direct, IGLContext source) { implementation.CreateContext(direct, source); } /// /// Swaps buffers on a context. This presents the rendered scene to the user. /// public void SwapBuffers() { implementation.SwapBuffers(); } /// /// Makes this context the current rendering target. /// public void MakeCurrent() { implementation.MakeCurrent(); } /// /// Gets the address of an OpenGL extension function. /// /// The name of the OpenGL function (e.g. "glGetString") /// /// A pointer to the specified function or IntPtr.Zero if the function isn't /// available in the current opengl context. /// /// public IntPtr GetAddress(string function) { return implementation.GetAddress(function); } /// /// Returns the display modes supported by the current opengl context. /// /// An IEnumerable containing all supported display modes. public IEnumerable GetDisplayModes() { return implementation.GetDisplayModes(); } /// /// Gets or sets a value indicating whether VSync is enabled. /// public bool VSync { get { return implementation.VSync; } set { implementation.VSync = value; } } #endregion #region IDisposable Members /// /// Disposes of the GLContext. /// public void Dispose() { implementation.Dispose(); } #endregion } }