/// <summary> /// Delete the GlControl context. /// </summary> protected override void DeleteContext() { // Event handling OnGraphicsContextDestroying(); // Delete OpenGL context _GraphicsContext.Dispose(); _GraphicsContext = null; // Emulates GlControl behaviour _RenderContext = IntPtr.Zero; }
/// <summary> /// Main routine for every RenderKernelService thread. /// </summary> /// <param name="data"></param> private static void KernelServiceMain(object data) { object[] args = (object[])data; GraphicsKernelService kService = (GraphicsKernelService)args[0]; GraphicsContext ctx = (GraphicsContext)args[1]; // Make the context current if (ctx != null) { ctx.MakeCurrent(true); } // Execute this service in another thread kService.ThreadExecute(ctx); // Dispose current context, if any if (ctx != null) { ctx.Dispose(); } }
/// <summary> /// Raises the <see cref="E:System.Windows.Forms.Control.HandleDestroyed"/> event. /// </summary> /// <param name="e"> /// An <see cref="T:System.EventArgs"/> that contains the event data. /// </param> protected override void OnHandleDestroyed(EventArgs e) { if (DesignMode == false) { if (_RenderContext != null) { // Raise DestroyContext event _RenderContext.MakeCurrent(true); RaiseGraphicsContextDestroyed(new GraphicsControlEventArgs(_RenderContext, _RenderWindow)); _RenderContext.MakeCurrent(false); // Dispose the renderer context _RenderContext.Dispose(); _RenderContext = null; } // Dispose the renderer window if (_RenderWindow != null) { _RenderWindow.Dispose(); _RenderWindow = null; } } // Base implementation base.OnHandleDestroyed(e); }