From 122e724c90602f3a96aa0571cca8db8b5311defc Mon Sep 17 00:00:00 2001 From: knokko Date: Wed, 2 Feb 2022 21:44:35 +0100 Subject: [PATCH] EGL: Add glfwGetEGLConfig --- README.md | 1 + docs/news.dox | 7 +++++++ include/GLFW/glfw3native.h | 18 ++++++++++++++++++ src/egl_context.c | 14 ++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/README.md b/README.md index 7ffd4850..2ee56998 100644 --- a/README.md +++ b/README.md @@ -304,6 +304,7 @@ information on what to include when reporting a bug. - [EGL] Added ANGLE backend selection via `EGL_ANGLE_platform_angle` extension (#1380) - [EGL] Bugfix: The `GLFW_DOUBLEBUFFER` context attribute was ignored (#1843) + - [EGL] Made it possible to query the `EGLConfig` that was chosen to create a given window via `glfwGetEGLConfig` ## Contact diff --git a/docs/news.dox b/docs/news.dox index 6c55e65f..e9e4ce3d 100644 --- a/docs/news.dox +++ b/docs/news.dox @@ -70,6 +70,12 @@ enabling keyboard access to the window menu via the Alt+Space and Alt-and-then-Space shortcuts. This may be useful for more GUI-oriented applications. +@subsubsection features_34_egl_getconfig Query EGLConfig + +GLFW now provides the [glfwGetEGLConfig](@ref glfwGetEGLConfig) +function that returns the EGLConfig that was chosen to create the +given window handle. + @subsection caveats Caveats for version 3.4 @@ -180,6 +186,7 @@ then GLFW will fail to initialize. - @ref glfwGetPlatform - @ref glfwPlatformSupported - @ref glfwInitVulkanLoader + - @ref glfwGetEGLConfig @subsubsection types_34 New types in version 3.4 diff --git a/include/GLFW/glfw3native.h b/include/GLFW/glfw3native.h index 41b2f86b..f843fa50 100644 --- a/include/GLFW/glfw3native.h +++ b/include/GLFW/glfw3native.h @@ -517,6 +517,24 @@ GLFWAPI EGLContext glfwGetEGLContext(GLFWwindow* window); * @ingroup native */ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* window); + + +/*! @brief Returns the `EGLConfig` of the specified window. + * + * @return The `EGLConfig` of the specified window, or `EGL_NO_SURFACE` if an + * [error](@ref error_handling) occurred. + * + * @errors Possible errors include @ref GLFW_NO_WINDOW_CONTEXT and @ref + * GLFW_NOT_INITIALIZED. + * + * @thread_safety This function may be called from any thread. Access is not + * synchronized. + * + * @since Added in version 3.0. + * + * @ingroup native + */ +GLFWAPI EGLConfig glfwGetEGLConfig(GLFWwindow* window); #endif #if defined(GLFW_EXPOSE_NATIVE_OSMESA) diff --git a/src/egl_context.c b/src/egl_context.c index 89ea78fa..7c1024c2 100644 --- a/src/egl_context.c +++ b/src/egl_context.c @@ -866,3 +866,17 @@ GLFWAPI EGLSurface glfwGetEGLSurface(GLFWwindow* handle) return window->context.egl.surface; } +GLFWAPI EGLConfig glfwGetEGLConfig(GLFWwindow* handle) +{ + _GLFWwindow* window = (_GLFWwindow*) handle; + _GLFW_REQUIRE_INIT_OR_RETURN(EGL_NO_SURFACE); + + if (window->context.source != GLFW_EGL_CONTEXT_API) + { + _glfwInputError(GLFW_NO_WINDOW_CONTEXT, NULL); + return EGL_NO_SURFACE; + } + + return window->context.egl.config; +} +