/// <summary> /// Get the OpenGL context current on the calling thread. /// </summary> /// <returns> /// It returns the handle of the OpenGL context current on the calling thread. It may return <see cref="IntPtr.Zero"/> /// indicating that no OpenGL context is current. /// </returns> public static IntPtr GetCurrentContext() { #if !MONODROID if (Egl.IsRequired == false) { switch (Platform.CurrentPlatformId) { case Platform.Id.WindowsNT: return(Wgl.GetCurrentContext()); case Platform.Id.Linux: return(Glx.GetCurrentContext()); case Platform.Id.MacOS: if (Glx.IsRequired) { return(Glx.GetCurrentContext()); } else { throw new NotSupportedException("platform MacOS not supported without Glx.IsRequired=true"); } default: throw new NotSupportedException(String.Format("platform {0} not supported", Platform.CurrentPlatformId)); } } else #endif return(Egl.GetCurrentContext()); }
/// <summary> /// Makes the context current on the calling thread. /// </summary> /// <param name="ctx"> /// A <see cref="IntPtr"/> that specify the context to be current on the calling thread, bound to /// thise device context. It can be IntPtr.Zero indicating that no context will be current. /// </param> /// <returns> /// It returns a boolean value indicating whether the operation was successful. /// </returns> /// <exception cref="NotSupportedException"> /// Exception thrown if the current platform is not supported. /// </exception> public override bool MakeCurrent(IntPtr ctx) { // Avoid actual call to wglMakeCurrent if it is not necessary // Efficient on simple/nominal applications IntPtr currentContext = Wgl.GetCurrentContext(), currentDc = Wgl.GetCurrentDC(); if (ctx == currentContext && _DeviceContext == currentDc) return (true); // Base implementation return (base.MakeCurrent(ctx)); }