void Dispose(bool disposing) { if (IsDisposed || Handle.Handle == IntPtr.Zero) { return; } Debug.Print("Disposing of AGL context."); Agl.aglSetCurrentContext(IntPtr.Zero); //Debug.Print("Setting drawable to null for context {0}.", Handle.Handle); //Agl.aglSetDrawable(Handle.Handle, IntPtr.Zero); // I do not know MacOS allows us to destroy a context from a separate thread, // like the finalizer thread. It's untested, but worst case is probably // an exception on application exit, which would be logged to the console. Debug.Print("Destroying context"); if (Agl.aglDestroyContext(Handle.Handle) == true) { Debug.Print("Context destruction completed successfully."); Handle = ContextHandle.Zero; return; } // failed to destroy context. Debug.WriteLine("Failed to destroy context."); Debug.WriteLine(Agl.ErrorString(Agl.GetError())); // don't throw an exception from the finalizer thread. if (disposing) { throw new MacOSException((OSStatus)Agl.GetError(), Agl.ErrorString(Agl.GetError())); } IsDisposed = true; }
internal static void aglSetFullScreen(IntPtr ctx, int width, int height, int freq, int device) { if ((int)Agl._aglSetFullScreen(ctx, width, height, freq, device) != 0) { return; } Agl.AglError error = Agl.GetError(); throw new MacOSException(error, Agl.ErrorString(error)); }
internal static void aglSetDrawable(IntPtr ctx, IntPtr draw) { if ((int)Agl._aglSetDrawable(ctx, draw) != 0) { return; } Agl.AglError error = Agl.GetError(); throw new MacOSException(error, Agl.ErrorString(error)); }
void MyAGLReportError(string function) { Agl.AglError err = Agl.GetError(); if (err != Agl.AglError.NoError) { throw new MacOSException((OSStatus)err, string.Format( "AGL Error from function {0}: {1} {2}", function, err, Agl.ErrorString(err))); } }
private void Dispose(bool disposing) { if (this.IsDisposed || this.Handle.Handle == IntPtr.Zero) { return; } Agl.aglSetCurrentContext(IntPtr.Zero); if (Agl.aglDestroyContext(this.Handle.Handle)) { this.Handle = ContextHandle.Zero; } else { if (disposing) { throw new MacOSException((OSStatus)Agl.GetError(), Agl.ErrorString(Agl.GetError())); } this.IsDisposed = true; } }
void Dispose(bool disposing) { if (IsDisposed || Handle.Handle == IntPtr.Zero) { return; } Debug.Print("Disposing of AGL context."); try { throw new Exception(); } catch (Exception e) { Debug.WriteLine(e.StackTrace); } Agl.aglSetCurrentContext(IntPtr.Zero); Agl.aglSetDrawable(Handle.Handle, IntPtr.Zero); Debug.Print("Set drawable to null for context {0}.", Handle.Handle); if (Agl.aglDestroyContext(Handle.Handle) == true) { Handle = ContextHandle.Zero; return; } // failed to destroy context. Debug.WriteLine("Failed to destroy context."); Debug.WriteLine(Agl.ErrorString(Agl.GetError())); // don't throw an exception from the finalizer thread. if (disposing) { throw new MacOSException((OSStatus)Agl.GetError(), Agl.ErrorString(Agl.GetError())); } IsDisposed = true; }