glcontext: Add api to check for vertex arrays
authorMatthias Clasen <mclasen@redhat.com>
Fri, 20 Oct 2023 00:56:59 +0000 (20:56 -0400)
committerChristian Hergert <chergert@redhat.com>
Tue, 31 Oct 2023 20:46:32 +0000 (13:46 -0700)
Vertex arrays are available in GL and in GLES >= 3.

We don't check for the GLES extension that provided
vertex arrays in older GLES, since that requires
using different API.

This api avoids version checks all over the place.

gdk/gdkglcontext.c
gdk/gdkglcontextprivate.h

index 3368310f9d9da93be424eb597e9ce2368e20d1d5..1a1cb324eaa2d49a27074cdbba0c199041ab0425 100644 (file)
@@ -1817,6 +1817,7 @@ gdk_gl_context_has_sync (GdkGLContext *self)
   return priv->has_sync;
 }
 
+/* Return if GL_BGRA works with glTexImage2D */
 gboolean
 gdk_gl_context_has_bgra (GdkGLContext *self)
 {
@@ -1825,6 +1826,27 @@ gdk_gl_context_has_bgra (GdkGLContext *self)
   return priv->has_bgra;
 }
 
+/* Return if glGenVertexArrays, glBindVertexArray and glDeleteVertexArrays
+ * can be used
+ */
+gboolean
+gdk_gl_context_has_vertex_arrays (GdkGLContext *self)
+{
+  GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (self);
+
+  switch (priv->api)
+    {
+    case GDK_GL_API_GL:
+      return TRUE;
+
+    case GDK_GL_API_GLES:
+      return gdk_gl_version_get_major (&priv->gl_version) >= 3;
+
+    default:
+      g_return_val_if_reached (FALSE);
+    }
+}
+
 /* This is currently private! */
 /* When using GL/ES, don't flip the 'R' and 'B' bits on Windows/ANGLE for glReadPixels() */
 gboolean
index f026eaf08130c42506c82038450bce81f6138005..c047370ca67961c0e88d5eb75f3487762c694077 100644 (file)
@@ -157,6 +157,8 @@ gboolean                gdk_gl_context_has_sync                 (GdkGLContext
 
 gboolean                gdk_gl_context_has_bgra                 (GdkGLContext    *self) G_GNUC_PURE;
 
+gboolean                gdk_gl_context_has_vertex_arrays        (GdkGLContext    *self) G_GNUC_PURE;
+
 double                  gdk_gl_context_get_scale                (GdkGLContext    *self);
 
 G_END_DECLS