[gtk/wip/otte/gl-hdr: 6/18] display: Get carried away by extension checker
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/gl-hdr: 6/18] display: Get carried away by extension checker
- Date: Wed, 6 Oct 2021 01:45:28 +0000 (UTC)
commit aba37c40d349980784b9ed9aef314277f45e20dd
Author: Benjamin Otte <otte redhat com>
Date: Sun Oct 3 17:40:09 2021 +0200
display: Get carried away by extension checker
I wanted to make it easy to check for multiple extensions and then got
carried away by trying to generate beautiful error messages.
gdk/gdkdisplay.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 50 insertions(+), 4 deletions(-)
---
diff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c
index 6f9bdec930..9f3608d3cd 100644
--- a/gdk/gdkdisplay.c
+++ b/gdk/gdkdisplay.c
@@ -1570,6 +1570,50 @@ gdk_display_create_egl_config (GdkDisplay *self,
#undef MAX_EGL_ATTRS
+static gboolean
+gdk_display_check_egl_extensions (EGLDisplay egl_display,
+ const char **extensions,
+ GError **error)
+{
+ GString *missing = NULL;
+ gsize i, n_missing;
+
+ n_missing = 0;
+
+ for (i = 0; extensions[i] != NULL; i++)
+ {
+ if (!epoxy_has_egl_extension (egl_display, extensions[i]))
+ {
+ if (missing == NULL)
+ {
+ missing = g_string_new (extensions[i]);
+ }
+ else
+ {
+ g_string_append (missing, ", ");
+ g_string_append (missing, extensions[i]);
+ }
+ n_missing++;
+ }
+ }
+
+ if (n_missing)
+ {
+ g_set_error (error, GDK_GL_ERROR, GDK_GL_ERROR_UNSUPPORTED_PROFILE,
+ /* translators: Arguments are the number of missing extensions
+ * followed by a comma-separated list of their names */
+ g_dngettext (GETTEXT_PACKAGE,
+ "EGL implementation is missing extension %2$s",
+ "EGL implementation is missing %d extensions: %s",
+ n_missing),
+ (int) n_missing, missing->str);
+
+ g_string_free (missing, TRUE);
+ return FALSE;
+ }
+
+ return TRUE;
+}
gboolean
gdk_display_init_egl (GdkDisplay *self,
@@ -1629,12 +1673,14 @@ gdk_display_init_egl (GdkDisplay *self,
return FALSE;
}
- if (!epoxy_has_egl_extension (priv->egl_display, "EGL_KHR_surfaceless_context"))
+ if (!gdk_display_check_egl_extensions (priv->egl_display,
+ (const char *[]) {
+ "EGL_KHR_surfaceless_context",
+ NULL
+ },
+ error))
{
g_clear_pointer (&priv->egl_display, eglTerminate);
- g_set_error_literal (error, GDK_GL_ERROR,
- GDK_GL_ERROR_UNSUPPORTED_PROFILE,
- _("Surfaceless contexts are not supported on this EGL implementation"));
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]