From 3424ec948cbfbd598744770fd16dd687e4e13506 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Thu, 16 Jan 2025 00:10:07 -0500
Subject: [PATCH] video: SDL_GL_GetAttribute gets correct
SDL_GL_CONTEXT_RELEASE_BEHAVIOR value.
Original patch was from @ramezgerges (thanks!).
Fixes #11697.
---
src/video/SDL_video.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index bbf99ecfa65fd..b896e99875b62 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -51,10 +51,14 @@
#include <SDL3/SDL_opengles2.h>
#endif // SDL_VIDEO_OPENGL_ES2 && !SDL_VIDEO_OPENGL
-#ifndef SDL_VIDEO_OPENGL
-#ifndef GL_CONTEXT_RELEASE_BEHAVIOR_KHR
-#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB
+// GL_CONTEXT_RELEASE_BEHAVIOR and GL_CONTEXT_RELEASE_BEHAVIOR_KHR have the same number.
+#ifndef GL_CONTEXT_RELEASE_BEHAVIOR
+#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB
#endif
+
+// GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH and GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR have the same number.
+#ifndef GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH
+#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC
#endif
#ifdef SDL_PLATFORM_EMSCRIPTEN
@@ -4820,11 +4824,7 @@ bool SDL_GL_GetAttribute(SDL_GLAttr attr, int *value)
attrib = GL_SAMPLES;
break;
case SDL_GL_CONTEXT_RELEASE_BEHAVIOR:
-#ifdef SDL_VIDEO_OPENGL
attrib = GL_CONTEXT_RELEASE_BEHAVIOR;
-#else
- attrib = GL_CONTEXT_RELEASE_BEHAVIOR_KHR;
-#endif
break;
case SDL_GL_BUFFER_SIZE:
{
@@ -4969,6 +4969,12 @@ bool SDL_GL_GetAttribute(SDL_GLAttr attr, int *value)
}
return SDL_SetError("OpenGL error: %08X", error);
}
+
+ // convert GL_CONTEXT_RELEASE_BEHAVIOR values back to SDL_GL_CONTEXT_RELEASE_BEHAVIOR values
+ if (attr == SDL_GL_CONTEXT_RELEASE_BEHAVIOR) {
+ *value = (*value == GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH) ? SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH : SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE;
+ }
+
return true;
#else
return SDL_Unsupported();