[OpenTK] Reduce duplication in GraphicsContextBase
authorthefiddler <stapostol@gmail.com>
Wed, 23 Jul 2014 08:08:57 +0000 (10:08 +0200)
committerthefiddler <stapostol@gmail.com>
Wed, 23 Jul 2014 08:08:57 +0000 (10:08 +0200)
Inheritors now take advantage of base class functionality to avoid
duplicating finalizers and warning messages.

Source/OpenTK/Graphics/GraphicsContextBase.cs
Source/OpenTK/Platform/Dummy/DummyGLContext.cs
Source/OpenTK/Platform/Egl/EglContext.cs
Source/OpenTK/Platform/MacOS/CocoaContext.cs
Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs
Source/OpenTK/Platform/Windows/WinGLContext.cs
Source/OpenTK/Platform/X11/X11GLContext.cs

index 686704c..ddfd491 100644 (file)
@@ -1,32 +1,35 @@
 #region License
 //
-// The Open Toolkit Library License
+// GraphicsContextBase.cs
 //
-// Copyright (c) 2006 - 2009 the Open Toolkit library.
+// Author:
+//       Stefanos A. <stapostol@gmail.com>
+//
+// Copyright (c) 2006-2014 Stefanos Apostolopoulos
 //
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
-// in the Software without restriction, including without limitation the rights to 
-// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-// the Software, and to permit persons to whom the Software is furnished to do
-// so, subject to the following conditions:
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
 //
-// The above copyright notice and this permission notice shall be included in all
-// copies or substantial portions of the Software.
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
 //
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-// WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-// OTHER DEALINGS IN THE SOFTWARE.
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
 //
 #endregion
 
 using System;
 using System.Collections.Generic;
+using System.Diagnostics;
 using System.Text;
 using OpenTK.Platform;
 
@@ -38,7 +41,7 @@ namespace OpenTK.Graphics
         #region Fields
 
         bool disposed;
-        
+
         protected ContextHandle Handle;
         protected GraphicsMode Mode;
 
@@ -106,7 +109,22 @@ namespace OpenTK.Graphics
 
         #region IDisposable Members
 
-        public abstract void Dispose();
+        public void Dispose()
+        {
+            Dispose(true);
+            GC.SuppressFinalize(this);
+        }
+
+        protected abstract void Dispose(bool disposing);
+
+        #if DEBUG
+        ~GraphicsContextBase()
+        {
+            Dispose(false);
+            Debug.Print("[Warning] {0}:{1} leaked. Did you forget to call Dispose()?",
+                GetType().FullName, Handle);
+        }
+        #endif
 
         #endregion
     }
index e2f06d2..ab6cead 100644 (file)
@@ -113,7 +113,7 @@ namespace OpenTK.Platform.Dummy
 
         #region --- IDisposable Members ---
 
-        public override void Dispose() { IsDisposed = true; }
+        protected override void Dispose(bool disposing) { IsDisposed = true; }
 
         #endregion
     }
index 575174f..13f8ec8 100644 (file)
@@ -180,15 +180,9 @@ namespace OpenTK.Platform.Egl
 
         #region IDisposable Members
 
-        public override void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
         // Todo: cross-reference the specs. What should happen if the context is destroyed from a different
         // thread?
-        protected virtual void Dispose(bool manual)
+        protected override void Dispose(bool manual)
         {
             if (!IsDisposed)
             {
@@ -197,19 +191,10 @@ namespace OpenTK.Platform.Egl
                     Egl.MakeCurrent(WindowInfo.Display, WindowInfo.Surface, WindowInfo.Surface, IntPtr.Zero);
                     Egl.DestroyContext(WindowInfo.Display, HandleAsEGLContext);
                 }
-                else
-                {
-                    Debug.Print("[Warning] {0}:{1} was not disposed.", this.GetType().Name, HandleAsEGLContext);
-                }
                 IsDisposed = true;
             }
         }
 
-        ~EglContext()
-        {
-            Dispose(false);
-        }
-
         #endregion
     }
 }
index 1d6fc34..89c17e4 100644 (file)
@@ -326,17 +326,7 @@ namespace OpenTK
 
         #region IDisposable Members
 
-        ~CocoaContext()
-        {
-            Dispose(false);
-        }
-
-        public override void Dispose()
-        {
-            Dispose(true);
-        }
-
-        void Dispose(bool disposing)
+        protected override void Dispose(bool disposing)
         {
             if (IsDisposed || Handle.Handle == IntPtr.Zero)
                 return;
index 0fd064b..eb6f8ab 100644 (file)
@@ -376,7 +376,7 @@ namespace OpenTK.Platform.SDL2
 
         #region IDisposable Members
 
-        void Dispose(bool manual)
+        protected override void Dispose(bool manual)
         {
             if (!IsDisposed)
             {
@@ -397,17 +397,6 @@ namespace OpenTK.Platform.SDL2
             }
         }
 
-        public override void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        ~Sdl2GraphicsContext()
-        {
-            Dispose(false);
-        }
-
         #endregion
     }
 }
index b7da272..0e5c044 100644 (file)
@@ -465,13 +465,7 @@ namespace OpenTK.Platform.Windows
 
         #region IDisposable Members
 
-        public override void Dispose()
-        {
-            Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool calledManually)
+        protected override void Dispose(bool calledManually)
         {
             if (!IsDisposed)
             {
@@ -479,20 +473,10 @@ namespace OpenTK.Platform.Windows
                 {
                     DestroyContext();
                 }
-                else
-                {
-                    Debug.Print("[Warning] OpenGL context {0} leaked. Did you forget to call IGraphicsContext.Dispose()?",
-                        Handle.Handle);
-                }
                 IsDisposed = true;
             }
         }
 
-        ~WinGLContext()
-        {
-            Dispose(false);
-        }
-
         #region private void DestroyContext()
 
         private void DestroyContext()
index d86a348..1b680d2 100644 (file)
@@ -483,13 +483,7 @@ namespace OpenTK.Platform.X11
 
         #region --- IDisposable Members ---
 
-        public override void Dispose()
-        {
-            this.Dispose(true);
-            GC.SuppressFinalize(this);
-        }
-
-        private void Dispose(bool manuallyCalled)
+        protected override void Dispose(bool manuallyCalled)
         {
             if (!IsDisposed)
             {
@@ -516,12 +510,6 @@ namespace OpenTK.Platform.X11
             }
             IsDisposed = true;
         }
-        
-
-        ~X11GLContext()
-        {
-            this.Dispose(false);
-        }
 
         #endregion
     }