[gtk/wip/otte/gleanup: 58/69] gdk: Move GL context construction to GdkGLContext
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/gleanup: 58/69] gdk: Move GL context construction to GdkGLContext
- Date: Thu, 22 Jul 2021 14:33:15 +0000 (UTC)
commit e06e0e855527bb841d45a7597860054675b8b1c5
Author: Benjamin Otte <otte redhat com>
Date: Fri Jul 9 02:50:32 2021 +0200
gdk: Move GL context construction to GdkGLContext
Now that we have the display's context to hook into, we can use it to
construct other GL contexts and don't need a GdkSurface vfunc anymore.
This has the added benefit that backends can have different GdkGLContext
classes on the display and get new GLContexts generated from them, so
we get multiple GL backend support per GDK backend for free.
I originally wanted to make this a vfunc on GdkGLContextClass, but
it turns out all the abckends would just call g_object_new() anyway.
gdk/gdkglcontext.c | 15 +++++++++++++++
gdk/gdkglcontextprivate.h | 2 ++
gdk/gdksurface.c | 25 ++++++-------------------
gdk/gdksurfaceprivate.h | 2 --
gdk/macos/gdkmacosdisplay.c | 4 +++-
gdk/macos/gdkmacosglcontext-private.h | 5 -----
gdk/macos/gdkmacosglcontext.c | 23 -----------------------
gdk/macos/gdkmacossurface.c | 16 ----------------
gdk/wayland/gdkglcontext-wayland.c | 13 -------------
gdk/wayland/gdkglcontext-wayland.h | 2 --
gdk/wayland/gdksurface-wayland.c | 1 -
gdk/win32/gdkglcontext-win32.c | 2 ++
gdk/win32/gdkglcontext-win32.h | 4 ----
gdk/win32/gdksurface-win32.c | 1 -
gdk/x11/gdkdisplay-x11.c | 7 ++++++-
gdk/x11/gdkglcontext-egl.c | 13 -------------
gdk/x11/gdkglcontext-glx.c | 13 -------------
gdk/x11/gdkglcontext-x11.c | 29 -----------------------------
gdk/x11/gdkglcontext-x11.h | 7 -------
gdk/x11/gdksurface-x11.c | 1 -
20 files changed, 34 insertions(+), 151 deletions(-)
---
diff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c
index 06a9de118e..5c0193c0ec 100644
--- a/gdk/gdkglcontext.c
+++ b/gdk/gdkglcontext.c
@@ -451,6 +451,21 @@ gdk_gl_context_init (GdkGLContext *self)
priv->use_es = -1;
}
+/* Must have called gdk_display_prepare_gl() before */
+GdkGLContext *
+gdk_gl_context_new_for_surface (GdkSurface *surface)
+{
+ GdkDisplay *display = gdk_surface_get_display (surface);
+ GdkGLContext *shared = gdk_display_get_gl_context (display);
+
+ /* assert gdk_display_prepare_gl() had been called */
+ g_assert (shared);
+
+ return g_object_new (G_OBJECT_TYPE (shared),
+ "surface", surface,
+ NULL);
+}
+
GdkGLContextPaintData *
gdk_gl_context_get_paint_data (GdkGLContext *context)
{
diff --git a/gdk/gdkglcontextprivate.h b/gdk/gdkglcontextprivate.h
index a338d7cbbe..c8afedda02 100644
--- a/gdk/gdkglcontextprivate.h
+++ b/gdk/gdkglcontextprivate.h
@@ -86,6 +86,8 @@ typedef struct {
guint use_es : 1;
} GdkGLContextPaintData;
+GdkGLContext * gdk_gl_context_new_for_surface (GdkSurface *surface);
+
void gdk_gl_context_set_is_legacy (GdkGLContext *context,
gboolean is_legacy);
diff --git a/gdk/gdksurface.c b/gdk/gdksurface.c
index f56b0e8c17..3f2b5189ff 100644
--- a/gdk/gdksurface.c
+++ b/gdk/gdksurface.c
@@ -1069,31 +1069,19 @@ GdkGLContext *
gdk_surface_get_paint_gl_context (GdkSurface *surface,
GError **error)
{
- GError *internal_error = NULL;
-
if (!gdk_display_prepare_gl (surface->display, error))
return NULL;
if (surface->gl_paint_context == NULL)
{
- GdkSurfaceClass *class = GDK_SURFACE_GET_CLASS (surface);
-
- surface->gl_paint_context =
- class->create_gl_context (surface, &internal_error);
- }
-
- if (internal_error != NULL)
- {
- g_propagate_error (error, internal_error);
- g_clear_object (&(surface->gl_paint_context));
- return NULL;
+ surface->gl_paint_context = gdk_surface_create_gl_context (surface, error);
+ if (surface->gl_paint_context == NULL)
+ return NULL;
}
- gdk_gl_context_realize (surface->gl_paint_context, &internal_error);
- if (internal_error != NULL)
+ if (!gdk_gl_context_realize (surface->gl_paint_context, error))
{
- g_propagate_error (error, internal_error);
- g_clear_object (&(surface->gl_paint_context));
+ g_clear_object (&surface->gl_paint_context);
return NULL;
}
@@ -1124,8 +1112,7 @@ gdk_surface_create_gl_context (GdkSurface *surface,
if (!gdk_display_prepare_gl (surface->display, error))
return NULL;
- return GDK_SURFACE_GET_CLASS (surface)->create_gl_context (surface,
- error);
+ return gdk_gl_context_new_for_surface (surface);
}
/**
diff --git a/gdk/gdksurfaceprivate.h b/gdk/gdksurfaceprivate.h
index cf7a0f73b6..3ab692e19c 100644
--- a/gdk/gdksurfaceprivate.h
+++ b/gdk/gdksurfaceprivate.h
@@ -160,8 +160,6 @@ struct _GdkSurfaceClass
void (* set_opaque_region) (GdkSurface *surface,
cairo_region_t *region);
- GdkGLContext *(*create_gl_context) (GdkSurface *surface,
- GError **error);
void (* request_layout) (GdkSurface *surface);
gboolean (* compute_size) (GdkSurface *surface);
};
diff --git a/gdk/macos/gdkmacosdisplay.c b/gdk/macos/gdkmacosdisplay.c
index 93afcce196..450ad2434d 100644
--- a/gdk/macos/gdkmacosdisplay.c
+++ b/gdk/macos/gdkmacosdisplay.c
@@ -641,7 +641,9 @@ static GdkGLContext *
gdk_macos_display_init_gl (GdkDisplay *display,
GError **error)
{
- return _gdk_macos_gl_context_new (display, NULL, FALSE, NULL, error);
+ return g_object_new (GDK_TYPE_MACOS_GL_CONTEXT,
+ "display", display,
+ NULL);
}
static void
diff --git a/gdk/macos/gdkmacosglcontext-private.h b/gdk/macos/gdkmacosglcontext-private.h
index a09a2da905..533888cd2c 100644
--- a/gdk/macos/gdkmacosglcontext-private.h
+++ b/gdk/macos/gdkmacosglcontext-private.h
@@ -57,11 +57,6 @@ struct _GdkMacosGLContextClass
GdkGLContextClass parent_class;
};
-GdkGLContext *_gdk_macos_gl_context_new (GdkMacosDisplay *display,
- GdkMacosSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error);
G_END_DECLS
diff --git a/gdk/macos/gdkmacosglcontext.c b/gdk/macos/gdkmacosglcontext.c
index 9b23fe929a..8e79f7688f 100644
--- a/gdk/macos/gdkmacosglcontext.c
+++ b/gdk/macos/gdkmacosglcontext.c
@@ -522,27 +522,4 @@ gdk_macos_gl_context_init (GdkMacosGLContext *self)
{
}
-GdkGLContext *
-_gdk_macos_gl_context_new (GdkMacosDisplay *display,
- GdkMacosSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error)
-{
- GdkMacosGLContext *context;
-
- g_return_val_if_fail (GDK_IS_MACOS_SURFACE (surface), NULL);
- g_return_val_if_fail (!share || GDK_IS_MACOS_GL_CONTEXT (share), NULL);
-
- context = g_object_new (GDK_TYPE_MACOS_GL_CONTEXT,
- "display", display,
- "surface", surface,
- "shared-context", share,
- NULL);
-
- context->is_attached = !!attached;
-
- return GDK_GL_CONTEXT (context);
-}
-
G_GNUC_END_IGNORE_DEPRECATIONS
diff --git a/gdk/macos/gdkmacossurface.c b/gdk/macos/gdkmacossurface.c
index aa8df2f35e..88be1f513d 100644
--- a/gdk/macos/gdkmacossurface.c
+++ b/gdk/macos/gdkmacossurface.c
@@ -358,21 +358,6 @@ gdk_macos_surface_drag_begin (GdkSurface *surface,
return GDK_DRAG (g_steal_pointer (&drag));
}
-static GdkGLContext *
-gdk_macos_surface_create_gl_context (GdkSurface *surface,
- gboolean attached,
- GdkGLContext *share,
- GError **error)
-{
- GdkMacosSurface *self = (GdkMacosSurface *)surface;
-
- g_assert (GDK_IS_MACOS_SURFACE (self));
- g_assert (!share || GDK_IS_GL_CONTEXT (share));
-
- return _gdk_macos_gl_context_new ((GdkMacosDisplay *) gdk_surface_get_display (surface),
- self, attached, share, error);
-}
-
static void
gdk_macos_surface_destroy (GdkSurface *surface,
gboolean foreign_destroy)
@@ -496,7 +481,6 @@ gdk_macos_surface_class_init (GdkMacosSurfaceClass *klass)
object_class->get_property = gdk_macos_surface_get_property;
object_class->set_property = gdk_macos_surface_set_property;
- surface_class->create_gl_context = gdk_macos_surface_create_gl_context;
surface_class->destroy = gdk_macos_surface_destroy;
surface_class->drag_begin = gdk_macos_surface_drag_begin;
surface_class->get_device_state = gdk_macos_surface_get_device_state;
diff --git a/gdk/wayland/gdkglcontext-wayland.c b/gdk/wayland/gdkglcontext-wayland.c
index 2a2e03300d..558c9cfed0 100644
--- a/gdk/wayland/gdkglcontext-wayland.c
+++ b/gdk/wayland/gdkglcontext-wayland.c
@@ -550,19 +550,6 @@ gdk_wayland_display_init_gl (GdkDisplay *display,
NULL);
}
-GdkGLContext *
-gdk_wayland_surface_create_gl_context (GdkSurface *surface,
- GError **error)
-{
- GdkWaylandGLContext *context;
-
- context = g_object_new (GDK_TYPE_WAYLAND_GL_CONTEXT,
- "surface", surface,
- NULL);
-
- return GDK_GL_CONTEXT (context);
-}
-
static void
gdk_wayland_gl_context_dispose (GObject *gobject)
{
diff --git a/gdk/wayland/gdkglcontext-wayland.h b/gdk/wayland/gdkglcontext-wayland.h
index add5807849..0a60a467be 100644
--- a/gdk/wayland/gdkglcontext-wayland.h
+++ b/gdk/wayland/gdkglcontext-wayland.h
@@ -45,8 +45,6 @@ struct _GdkWaylandGLContextClass
GdkGLContext * gdk_wayland_display_init_gl (GdkDisplay *display,
GError **error);
-GdkGLContext * gdk_wayland_surface_create_gl_context (GdkSurface *surface,
- GError **error);
G_END_DECLS
diff --git a/gdk/wayland/gdksurface-wayland.c b/gdk/wayland/gdksurface-wayland.c
index 404b10b226..5689241c7d 100644
--- a/gdk/wayland/gdksurface-wayland.c
+++ b/gdk/wayland/gdksurface-wayland.c
@@ -4224,7 +4224,6 @@ gdk_wayland_surface_class_init (GdkWaylandSurfaceClass *klass)
impl_class->drag_begin = _gdk_wayland_surface_drag_begin;
impl_class->get_scale_factor = gdk_wayland_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_wayland_surface_set_opaque_region;
- impl_class->create_gl_context = gdk_wayland_surface_create_gl_context;
impl_class->request_layout = gdk_wayland_surface_request_layout;
impl_class->compute_size = gdk_wayland_surface_compute_size;
}
diff --git a/gdk/win32/gdkglcontext-win32.c b/gdk/win32/gdkglcontext-win32.c
index 9d87b89e0a..44010df3a3 100644
--- a/gdk/win32/gdkglcontext-win32.c
+++ b/gdk/win32/gdkglcontext-win32.c
@@ -1155,6 +1155,7 @@ gdk_win32_gl_context_init (GdkWin32GLContext *self)
{
}
+#if 0
GdkGLContext *
_gdk_win32_surface_create_gl_context (GdkSurface *surface,
GError **error)
@@ -1203,6 +1204,7 @@ _gdk_win32_surface_create_gl_context (GdkSurface *surface,
return GDK_GL_CONTEXT (context);
}
+#endif
/**
* gdk_win32_display_get_wgl_version:
diff --git a/gdk/win32/gdkglcontext-win32.h b/gdk/win32/gdkglcontext-win32.h
index 5a66334fca..b13fb04913 100644
--- a/gdk/win32/gdkglcontext-win32.h
+++ b/gdk/win32/gdkglcontext-win32.h
@@ -59,10 +59,6 @@ struct _GdkWin32GLContextClass
GdkGLContextClass parent_class;
};
-GdkGLContext *
-_gdk_win32_surface_create_gl_context (GdkSurface *window,
- GError **error);
-
void
_gdk_win32_surface_invalidate_egl_framebuffer (GdkSurface *surface);
diff --git a/gdk/win32/gdksurface-win32.c b/gdk/win32/gdksurface-win32.c
index bb96b6f6e3..48194888a9 100644
--- a/gdk/win32/gdksurface-win32.c
+++ b/gdk/win32/gdksurface-win32.c
@@ -4623,7 +4623,6 @@ gdk_win32_surface_class_init (GdkWin32SurfaceClass *klass)
impl_class->destroy_notify = gdk_win32_surface_destroy_notify;
impl_class->drag_begin = _gdk_win32_surface_drag_begin;
- impl_class->create_gl_context = _gdk_win32_surface_create_gl_context;
impl_class->get_scale_factor = _gdk_win32_surface_get_scale_factor;
impl_class->request_layout = _gdk_win32_surface_request_layout;
impl_class->compute_size = _gdk_win32_surface_compute_size;
diff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c
index 6ea0833948..947e8122a4 100644
--- a/gdk/x11/gdkdisplay-x11.c
+++ b/gdk/x11/gdkdisplay-x11.c
@@ -2889,7 +2889,12 @@ gdk_x11_display_init_gl (GdkDisplay *display,
if (!have_gl)
return NULL;
- return gdk_x11_surface_create_gl_context (display_x11->leader_gdk_surface, error);
+ if (display_x11->egl_display)
+ return g_object_new (GDK_TYPE_X11_GL_CONTEXT_EGL, "surface", display_x11->leader_gdk_surface, NULL);
+ else if (display_x11->glx_config != NULL)
+ return g_object_new (GDK_TYPE_X11_GL_CONTEXT_GLX, "surface", display_x11->leader_gdk_surface, NULL);
+ else
+ g_return_val_if_reached (NULL);
}
static void
diff --git a/gdk/x11/gdkglcontext-egl.c b/gdk/x11/gdkglcontext-egl.c
index 2248adaf2c..b5a571303c 100644
--- a/gdk/x11/gdkglcontext-egl.c
+++ b/gdk/x11/gdkglcontext-egl.c
@@ -742,19 +742,6 @@ gdk_x11_display_init_egl (GdkX11Display *self,
return TRUE;
}
-GdkX11GLContext *
-gdk_x11_gl_context_egl_new (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContextEGL *context;
-
- context = g_object_new (GDK_TYPE_X11_GL_CONTEXT_EGL,
- "surface", surface,
- NULL);
-
- return GDK_X11_GL_CONTEXT (context);
-}
-
/**
* gdk_x11_display_get_egl_version:
* @display: (type GdkX11Display): a `GdkDisplay`
diff --git a/gdk/x11/gdkglcontext-glx.c b/gdk/x11/gdkglcontext-glx.c
index 70489374c0..67e008527d 100644
--- a/gdk/x11/gdkglcontext-glx.c
+++ b/gdk/x11/gdkglcontext-glx.c
@@ -890,19 +890,6 @@ gdk_x11_display_create_glx_config (GdkX11Display *self,
#undef MAX_GLX_ATTRS
-GdkX11GLContext *
-gdk_x11_gl_context_glx_new (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContextGLX *context;
-
- return g_object_new (GDK_TYPE_X11_GL_CONTEXT_GLX,
- "surface", surface,
- NULL);
-
- return GDK_X11_GL_CONTEXT (context);
-}
-
/**
* gdk_x11_display_get_glx_version:
* @display: (type GdkX11Display): a `GdkDisplay`
diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c
index 88453663e8..98210b5ef1 100644
--- a/gdk/x11/gdkglcontext-x11.c
+++ b/gdk/x11/gdkglcontext-x11.c
@@ -53,35 +53,6 @@ gdk_x11_gl_context_init (GdkX11GLContext *self)
self->do_frame_sync = TRUE;
}
-GdkGLContext *
-gdk_x11_surface_create_gl_context (GdkSurface *surface,
- GError **error)
-{
- GdkX11GLContext *context = NULL;
- GdkX11Display *display_x11;
- GdkDisplay *display;
-
- display = gdk_surface_get_display (surface);
- display_x11 = GDK_X11_DISPLAY (display);
-
- if (display_x11->egl_display)
- context = gdk_x11_gl_context_egl_new (surface, error);
- else if (display_x11->glx_config != NULL)
- context = gdk_x11_gl_context_glx_new (surface, error);
- else
- {
- g_assert (display_x11->gl_error);
- if (error)
- *error = g_error_copy (display_x11->gl_error);
- return NULL;
- }
-
- if (context == NULL)
- return NULL;
-
- return GDK_GL_CONTEXT (context);
-}
-
gboolean
gdk_x11_display_init_gl_backend (GdkX11Display *self,
Visual **out_visual,
diff --git a/gdk/x11/gdkglcontext-x11.h b/gdk/x11/gdkglcontext-x11.h
index 70cee907ab..d1b6c8e106 100644
--- a/gdk/x11/gdkglcontext-x11.h
+++ b/gdk/x11/gdkglcontext-x11.h
@@ -63,9 +63,6 @@ gboolean gdk_x11_display_init_gl_backend (GdkX11Display *
int *out_depth,
GError **error);
-GdkGLContext * gdk_x11_surface_create_gl_context (GdkSurface *window,
- GError **error);
-
/* GLX */
#define GDK_TYPE_X11_GL_CONTEXT_GLX (gdk_x11_gl_context_glx_get_type())
#define GDK_X11_GL_CONTEXT_GLX(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_X11_GL_CONTEXT_GLX,
GdkX11GLContextGLX))
@@ -80,8 +77,6 @@ gboolean gdk_x11_display_init_glx (GdkX11Display *
void gdk_x11_surface_destroy_glx_drawable (GdkX11Surface *self);
GType gdk_x11_gl_context_glx_get_type (void) G_GNUC_CONST;
-GdkX11GLContext * gdk_x11_gl_context_glx_new (GdkSurface *surface,
- GError **error);
/* EGL */
@@ -99,8 +94,6 @@ gboolean gdk_x11_display_init_egl (GdkX11Display *
void gdk_x11_surface_destroy_egl_surface (GdkX11Surface *self);
GType gdk_x11_gl_context_egl_get_type (void) G_GNUC_CONST;
-GdkX11GLContext * gdk_x11_gl_context_egl_new (GdkSurface *surface,
- GError **error);
G_END_DECLS
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index 89ca9f0ad2..03aea25d3a 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -4810,7 +4810,6 @@ gdk_x11_surface_class_init (GdkX11SurfaceClass *klass)
impl_class->drag_begin = _gdk_x11_surface_drag_begin;
impl_class->get_scale_factor = gdk_x11_surface_get_scale_factor;
impl_class->set_opaque_region = gdk_x11_surface_set_opaque_region;
- impl_class->create_gl_context = gdk_x11_surface_create_gl_context;
impl_class->request_layout = gdk_x11_surface_request_layout;
impl_class->compute_size = gdk_x11_surface_compute_size;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]