summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2022-05-05 13:09:26 -0400
committerMatthias Clasen <mclasen@redhat.com>2022-05-11 16:32:17 -0400
commitf2436eaf7b02516e207b56f37713a6471451d76d (patch)
treef2af714b167d5961d2988fc60ee3ca3ddda310ab
parent2f9387630f08e32db68c07c968d05d8d1bb1bd8b (diff)
downloadgtk+-f2436eaf7b02516e207b56f37713a6471451d76d.tar.gz
gsk: Check for half float support
The GL renderer currently relies on half float support in vertex buffers, so check that we have it. Related: #4894
-rw-r--r--gsk/gl/gskglrenderer.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index d1b40d225e..afb34cd2f1 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -24,6 +24,7 @@
#include <gdk/gdkdisplayprivate.h>
#include <gdk/gdkglcontextprivate.h>
#include <gdk/gdksurfaceprivate.h>
+#include <gdk/gdkintl.h>
#include <gsk/gskdebugprivate.h>
#include <gsk/gskrendererprivate.h>
#include <gsk/gskrendernodeprivate.h>
@@ -93,6 +94,7 @@ gsk_gl_renderer_realize (GskRenderer *renderer,
GdkDisplay *display;
gboolean ret = FALSE;
gboolean debug_shaders = FALSE;
+ GdkGLAPI api;
if (self->context != NULL)
return TRUE;
@@ -115,6 +117,24 @@ gsk_gl_renderer_realize (GskRenderer *renderer,
if (!context || !gdk_gl_context_realize (context, error))
goto failure;
+ api = gdk_gl_context_get_api (context);
+ if (api == GDK_GL_API_GLES)
+ {
+ gdk_gl_context_make_current (context);
+
+ if (!gdk_gl_context_has_vertex_half_float (context))
+ {
+ int major, minor;
+
+ gdk_gl_context_get_version (context, &major, &minor);
+ g_set_error (error,
+ GDK_GL_ERROR, GDK_GL_ERROR_NOT_AVAILABLE,
+ _("This GLES %d.%d implementation does not support half-float vertex data"),
+ major, minor);
+ goto failure;
+ }
+ }
+
#ifdef G_ENABLE_DEBUG
if (GSK_RENDERER_DEBUG_CHECK (GSK_RENDERER (self), SHADERS))
debug_shaders = TRUE;
@@ -331,7 +351,7 @@ gsk_gl_renderer_render_texture (GskRenderer *renderer,
{
for (x = 0; x < width; x += max_size)
{
- texture = gsk_gl_renderer_render_texture (renderer, root,
+ texture = gsk_gl_renderer_render_texture (renderer, root,
&GRAPHENE_RECT_INIT (x, y,
MIN (max_size, viewport->size.width - x),
MIN (max_size, viewport->size.height - y)));