From a7ddb543a94ed973cfcf681c6dc134994003968e Mon Sep 17 00:00:00 2001 From: Jarl Gullberg Date: Thu, 29 Jun 2017 12:43:19 +0200 Subject: [PATCH] Moved the autorelease pool to the context. --- src/OpenTK/Platform/MacOS/CocoaContext.cs | 12 ++++++++++++ src/OpenTK/Platform/MacOS/CocoaNativeWindow.cs | 9 +-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/OpenTK/Platform/MacOS/CocoaContext.cs b/src/OpenTK/Platform/MacOS/CocoaContext.cs index 485713fa..79958f63 100644 --- a/src/OpenTK/Platform/MacOS/CocoaContext.cs +++ b/src/OpenTK/Platform/MacOS/CocoaContext.cs @@ -54,6 +54,8 @@ namespace OpenTK "/System/Library/Frameworks/OpenGL.framework/OpenGLES", AddImageFlags.ReturnOnError); + private IntPtr autoreleasePool; + static CocoaContext() { Cocoa.Initialize(); @@ -117,6 +119,10 @@ namespace OpenTK private void CreateContext(GraphicsMode mode, CocoaWindowInfo cocoaWindow, IntPtr shareContextRef, int majorVersion, int minorVersion, bool fullscreen) { + // Create a new autorelease pool for allocations in this context (mach ports, etc) + autoreleasePool = Cocoa.SendIntPtr(Class.NSAutoreleasePool, Selector.Get("alloc")); + autoreleasePool = Cocoa.SendIntPtr(autoreleasePool, Selector.Get("init")); + // Prepare attributes IntPtr pixelFormat = SelectPixelFormat(mode, majorVersion, minorVersion); if (pixelFormat == IntPtr.Zero) @@ -352,6 +358,12 @@ namespace OpenTK Cocoa.SendVoid(Handle.Handle, Selector.Get("clearDrawable")); Cocoa.SendVoid(Handle.Handle, Selector.Get("release")); + // Drain the autorelease pool for the context, closing mach ports (if there is one) + if (autoreleasePool != IntPtr.Zero) + { + Cocoa.SendVoid(autoreleasePool, Selector.Get("drain")); + } + Handle = ContextHandle.Zero; IsDisposed = true; diff --git a/src/OpenTK/Platform/MacOS/CocoaNativeWindow.cs b/src/OpenTK/Platform/MacOS/CocoaNativeWindow.cs index 9dad0c9e..5ec5fe93 100644 --- a/src/OpenTK/Platform/MacOS/CocoaNativeWindow.cs +++ b/src/OpenTK/Platform/MacOS/CocoaNativeWindow.cs @@ -137,7 +137,7 @@ namespace OpenTK.Platform.MacOS } private CocoaWindowInfo windowInfo; - private IntPtr autoreleasePool; + private IntPtr windowClass; private IntPtr trackingArea; private IntPtr current_icon_handle; @@ -158,10 +158,6 @@ namespace OpenTK.Platform.MacOS public CocoaNativeWindow(int x, int y, int width, int height, string title, GraphicsMode mode, GameWindowFlags options, DisplayDevice device) { - // Create a new autorelease pool for allocations in this window (mach ports, etc) - autoreleasePool = Cocoa.SendIntPtr(Class.NSAutoreleasePool, Selector.Get("alloc")); - autoreleasePool = Cocoa.SendIntPtr(autoreleasePool, Selector.Get("init")); - // Create callback methods. We need to store those, // otherwise the GC may collect them while they are // still active. @@ -1288,9 +1284,6 @@ namespace OpenTK.Platform.MacOS Debug.Print("[Mac] Disposing {0}", windowInfo); windowInfo.Dispose(); - - // Drain the autorelease pool for the application, closing mach ports - Cocoa.SendVoid(autoreleasePool, Selector.Get("drain")); } else {