src/video/windows/SDL_windowsopengl.c
changeset 9413 eb50f63a5777
parent 8735 2134fc16252b
child 9619 b94b6d0bff0f
--- a/src/video/windows/SDL_windowsopengl.c	Fri Mar 06 16:03:40 2015 +0000
+++ b/src/video/windows/SDL_windowsopengl.c	Fri Mar 20 12:23:53 2015 -0400
@@ -74,6 +74,13 @@
 #define WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB                0x20A9
 #endif
 
+#ifndef WGL_ARB_context_flush_control
+#define WGL_ARB_context_flush_control
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_ARB   0x2097
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB           0x0000
+#define WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB          0x2098
+#endif
+
 typedef HGLRC(APIENTRYP PFNWGLCREATECONTEXTATTRIBSARBPROC) (HDC hDC,
                                                             HGLRC
                                                             hShareContext,
@@ -405,6 +412,11 @@
         _this->gl_data->HAS_WGL_EXT_create_context_es2_profile = SDL_TRUE;
     }
 
+    /* Check for GLX_ARB_context_flush_control */
+    if (HasExtension("WGL_ARB_context_flush_control", extensions)) {
+        _this->gl_data->HAS_WGL_ARB_context_flush_control = SDL_TRUE;
+    }
+
     _this->gl_data->wglMakeCurrent(hdc, NULL);
     _this->gl_data->wglDeleteContext(hglrc);
     ReleaseDC(hwnd, hdc);
@@ -648,8 +660,8 @@
             SDL_SetError("GL 3.x is not supported");
             context = temp_context;
         } else {
-        /* max 8 attributes plus terminator */
-            int attribs[9] = {
+        /* max 10 attributes plus terminator */
+            int attribs[11] = {
                 WGL_CONTEXT_MAJOR_VERSION_ARB, _this->gl_config.major_version,
                 WGL_CONTEXT_MINOR_VERSION_ARB, _this->gl_config.minor_version,
                 0
@@ -668,6 +680,14 @@
         attribs[iattr++] = _this->gl_config.flags;
         }
 
+        /* only set if wgl extension is available */
+        if( _this->gl_data->HAS_WGL_ARB_context_flush_control ) {
+            attribs[iattr++] = WGL_CONTEXT_RELEASE_BEHAVIOR_ARB;
+            attribs[iattr++] = _this->gl_config.release_behavior ?
+                                    WGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB :
+                                    WGL_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB;
+        }
+
         attribs[iattr++] = 0;
 
             /* Create the GL 3.x context */