From 7dc06a2bf788f5d069864a988aff5d4af84731e5 Mon Sep 17 00:00:00 2001 From: Leigh Scott Date: Tue, 28 Oct 2025 23:53:49 +0000 Subject: [PATCH 1/2] cogl/winsys: Remove eglGetProcAddress workaround for EGL < 1.5 --- cogl/cogl/cogl-feature-private.c | 7 +------ cogl/cogl/cogl-renderer-private.h | 3 +-- cogl/cogl/cogl-renderer.c | 5 ++--- cogl/cogl/cogl.c | 2 +- cogl/cogl/driver/gl/gl/cogl-driver-gl.c | 9 +++------ cogl/cogl/driver/gl/gles/cogl-driver-gles.c | 6 ++---- cogl/cogl/winsys/cogl-winsys-egl.c | 15 ++------------- cogl/cogl/winsys/cogl-winsys-glx.c | 7 +------ cogl/cogl/winsys/cogl-winsys-private.h | 3 +-- 9 files changed, 14 insertions(+), 43 deletions(-) diff --git a/cogl/cogl/cogl-feature-private.c b/cogl/cogl/cogl-feature-private.c index 3b2a9be98..99cff4bb3 100644 --- a/cogl/cogl/cogl-feature-private.c +++ b/cogl/cogl/cogl-feature-private.c @@ -52,7 +52,6 @@ _cogl_feature_check (CoglRenderer *renderer, const char *suffix = NULL; int func_num; CoglExtGlesAvailability gles_availability = 0; - gboolean in_core; switch (driver) { @@ -79,7 +78,6 @@ _cogl_feature_check (CoglRenderer *renderer, (data->gles_availability & gles_availability)) { suffix = ""; - in_core = TRUE; } else { @@ -132,8 +130,6 @@ _cogl_feature_check (CoglRenderer *renderer, break; } } - - in_core = FALSE; } /* If we couldn't find anything that provides the functions then @@ -150,8 +146,7 @@ _cogl_feature_check (CoglRenderer *renderer, full_function_name = g_strconcat (data->functions[func_num].name, suffix, NULL); func = _cogl_renderer_get_proc_address (renderer, - full_function_name, - in_core); + full_function_name); g_free (full_function_name); if (func == NULL) diff --git a/cogl/cogl/cogl-renderer-private.h b/cogl/cogl/cogl-renderer-private.h index 66634c075..62e99fdb0 100644 --- a/cogl/cogl/cogl-renderer-private.h +++ b/cogl/cogl/cogl-renderer-private.h @@ -98,7 +98,6 @@ _cogl_renderer_remove_native_filter (CoglRenderer *renderer, void * _cogl_renderer_get_proc_address (CoglRenderer *renderer, - const char *name, - gboolean in_core); + const char *name); #endif /* __COGL_RENDERER_PRIVATE_H */ diff --git a/cogl/cogl/cogl-renderer.c b/cogl/cogl/cogl-renderer.c index b99662da4..925548a08 100644 --- a/cogl/cogl/cogl-renderer.c +++ b/cogl/cogl/cogl-renderer.c @@ -701,12 +701,11 @@ cogl_renderer_get_winsys_id (CoglRenderer *renderer) void * _cogl_renderer_get_proc_address (CoglRenderer *renderer, - const char *name, - gboolean in_core) + const char *name) { const CoglWinsysVtable *winsys = _cogl_renderer_get_winsys (renderer); - return winsys->renderer_get_proc_address (renderer, name, in_core); + return winsys->renderer_get_proc_address (renderer, name); } void diff --git a/cogl/cogl/cogl.c b/cogl/cogl/cogl.c index 2cf0dbe21..ceac0a466 100644 --- a/cogl/cogl/cogl.c +++ b/cogl/cogl/cogl.c @@ -58,7 +58,7 @@ cogl_get_proc_address (const char* name) { _COGL_GET_CONTEXT (ctx, NULL); - return _cogl_renderer_get_proc_address (ctx->display->renderer, name, FALSE); + return _cogl_renderer_get_proc_address (ctx->display->renderer, name); } gboolean diff --git a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c index bb780cec5..e15c172eb 100644 --- a/cogl/cogl/driver/gl/gl/cogl-driver-gl.c +++ b/cogl/cogl/driver/gl/gl/cogl-driver-gl.c @@ -383,16 +383,13 @@ _cogl_driver_update_features (CoglContext *ctx, we can expect */ ctx->glGetString = (void *) _cogl_renderer_get_proc_address (ctx->display->renderer, - "glGetString", - TRUE); + "glGetString"); ctx->glGetStringi = (void *) _cogl_renderer_get_proc_address (ctx->display->renderer, - "glGetStringi", - TRUE); + "glGetStringi"); ctx->glGetIntegerv = (void *) _cogl_renderer_get_proc_address (ctx->display->renderer, - "glGetIntegerv", - TRUE); + "glGetIntegerv"); gl_extensions = _cogl_context_get_gl_extensions (ctx); diff --git a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c index ca98823e8..f0ecc6585 100644 --- a/cogl/cogl/driver/gl/gles/cogl-driver-gles.c +++ b/cogl/cogl/driver/gl/gles/cogl-driver-gles.c @@ -251,12 +251,10 @@ _cogl_driver_update_features (CoglContext *context, can expect */ context->glGetString = (void *) _cogl_renderer_get_proc_address (context->display->renderer, - "glGetString", - TRUE); + "glGetString"); context->glGetStringi = (void *) _cogl_renderer_get_proc_address (context->display->renderer, - "glGetStringi", - TRUE); + "glGetStringi"); gl_extensions = _cogl_context_get_gl_extensions (context); diff --git a/cogl/cogl/winsys/cogl-winsys-egl.c b/cogl/cogl/winsys/cogl-winsys-egl.c index 5dd106d1b..97d285daf 100644 --- a/cogl/cogl/winsys/cogl-winsys-egl.c +++ b/cogl/cogl/winsys/cogl-winsys-egl.c @@ -112,20 +112,9 @@ static const CoglFeatureData winsys_feature_data[] = static GCallback _cogl_winsys_renderer_get_proc_address (CoglRenderer *renderer, - const char *name, - gboolean in_core) + const char *name) { - void *ptr = NULL; - - if (!in_core) - ptr = eglGetProcAddress (name); - - /* eglGetProcAddress doesn't support fetching core API so we need to - get that separately with GModule */ - if (ptr == NULL) - g_module_symbol (renderer->libgl_module, name, &ptr); - - return ptr; + return eglGetProcAddress (name); } static void diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c index c2deaeb8b..f5d537f38 100644 --- a/cogl/cogl/winsys/cogl-winsys-glx.c +++ b/cogl/cogl/winsys/cogl-winsys-glx.c @@ -156,15 +156,10 @@ static const CoglFeatureData winsys_feature_data[] = static GCallback _cogl_winsys_renderer_get_proc_address (CoglRenderer *renderer, - const char *name, - gboolean in_core) + const char *name) { CoglGLXRenderer *glx_renderer = renderer->winsys; - /* The GLX_ARB_get_proc_address extension documents that this should - * work for core functions too so we don't need to do anything - * special with in_core */ - return glx_renderer->glXGetProcAddress ((const GLubyte *) name); } diff --git a/cogl/cogl/winsys/cogl-winsys-private.h b/cogl/cogl/winsys/cogl-winsys-private.h index d849ef705..7781f9004 100644 --- a/cogl/cogl/winsys/cogl-winsys-private.h +++ b/cogl/cogl/winsys/cogl-winsys-private.h @@ -73,8 +73,7 @@ typedef struct _CoglWinsysVtable GCallback (*renderer_get_proc_address) (CoglRenderer *renderer, - const char *name, - gboolean in_core); + const char *name); gboolean (*renderer_connect) (CoglRenderer *renderer, GError **error); From c9b7a647e47a53bf9f3344cf0d19662dae4d9b43 Mon Sep 17 00:00:00 2001 From: Leigh Scott Date: Tue, 28 Oct 2025 23:57:36 +0000 Subject: [PATCH 2/2] cogl/egl: Restore support for EGL 1.4 --- cogl/cogl/winsys/cogl-winsys-egl.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cogl/cogl/winsys/cogl-winsys-egl.c b/cogl/cogl/winsys/cogl-winsys-egl.c index 97d285daf..0d24824d8 100644 --- a/cogl/cogl/winsys/cogl-winsys-egl.c +++ b/cogl/cogl/winsys/cogl-winsys-egl.c @@ -114,7 +114,12 @@ static GCallback _cogl_winsys_renderer_get_proc_address (CoglRenderer *renderer, const char *name) { - return eglGetProcAddress (name); + GCallback result = eglGetProcAddress (name); + + if (result == NULL) + g_module_symbol (renderer->libgl_module, name, (gpointer *)&result); + + return result; } static void