From a4d2a31386b701436fdd9b2806ed8e9c7dd6d1c4 Mon Sep 17 00:00:00 2001
From: thefiddler <stapostol@gmail.com>
Date: Thu, 9 Jan 2014 23:36:28 +0100
Subject: [PATCH] [Mac] OpenGL 3.x/4.x require core profile flag

SDL will fail to construct an OpenGL 3.x/4.x context on Mac OS X,
unless ContextProfileFlags.CORE is specified.

Fixes issue #44

Upstream enhancement request at
https://bugzilla.libsdl.org/show_bug.cgi?id=2342
---
 Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs b/Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs
index a34019f9..c7714b58 100644
--- a/Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs
+++ b/Source/OpenTK/Platform/SDL2/Sdl2GraphicsContext.cs
@@ -157,6 +157,8 @@ namespace OpenTK.Platform.SDL2
             int major, int minor,
             GraphicsContextFlags flags)
         {
+            ContextProfileFlags cpflags = 0;
+
             if (mode.AccumulatorFormat.BitsPerPixel > 0)
             {
                 SDL.GL.SetAttribute(ContextAttribute.ACCUM_ALPHA_SIZE, mode.AccumulatorFormat.Alpha);
@@ -203,6 +205,15 @@ namespace OpenTK.Platform.SDL2
             {
                 SDL.GL.SetAttribute(ContextAttribute.CONTEXT_MAJOR_VERSION, major);
                 SDL.GL.SetAttribute(ContextAttribute.CONTEXT_MINOR_VERSION, minor);
+
+                // Workaround for https://github.com/opentk/opentk/issues/44
+                // Mac OS X desktop OpenGL 3.x/4.x contexts require require
+                // ContextProfileFlags.Core, otherwise they will fail to construct.
+                if (Configuration.RunningOnMacOS && major >= 3 &&
+                    (flags & GraphicsContextFlags.Embedded) == 0)
+                {
+                    cpflags |= ContextProfileFlags.CORE;
+                }
             }
 
             if ((flags & GraphicsContextFlags.Debug) != 0)
@@ -223,7 +234,6 @@ namespace OpenTK.Platform.SDL2
             */
 
             {
-                ContextProfileFlags cpflags = 0;
                 if ((flags & GraphicsContextFlags.Embedded) != 0)
                 {
                     cpflags |= ContextProfileFlags.ES;