From: Benjamin Otte Date: Thu, 22 Jul 2021 14:23:06 +0000 (+0200) Subject: glx: Get rid fo DrawableInfo X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~3^2~9^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=620ccdabb5c4be2d49ba47705d44a895f6658085;p=gtk4.git glx: Get rid fo DrawableInfo Store the frame counter in the surface, where it belongs. --- diff --git a/gdk/x11/gdkglcontext-glx.c b/gdk/x11/gdkglcontext-glx.c index 829a8f8bc6..6e4c46abb1 100644 --- a/gdk/x11/gdkglcontext-glx.c +++ b/gdk/x11/gdkglcontext-glx.c @@ -46,12 +46,6 @@ struct _GdkX11GLContextGLX typedef struct _GdkX11GLContextClass GdkX11GLContextGLXClass; -typedef struct { - GdkDisplay *display; - - guint32 last_frame_counter; -} DrawableInfo; - G_DEFINE_TYPE (GdkX11GLContextGLX, gdk_x11_gl_context_glx, GDK_TYPE_X11_GL_CONTEXT) static GLXDrawable @@ -84,27 +78,6 @@ gdk_x11_surface_destroy_glx_drawable (GdkX11Surface *self) self->glx_drawable = None; } -static void -drawable_info_free (gpointer data_) -{ - g_slice_free (DrawableInfo, data_); -} - -static DrawableInfo * -get_glx_drawable_info (GdkSurface *surface) -{ - return g_object_get_data (G_OBJECT (surface), "-gdk-x11-surface-glx-info"); -} - -static void -set_glx_drawable_info (GdkSurface *surface, - DrawableInfo *info) -{ - g_object_set_data_full (G_OBJECT (surface), "-gdk-x11-surface-glx-info", - info, - drawable_info_free); -} - static void maybe_wait_for_vblank (GdkDisplay *display, GLXDrawable drawable) @@ -151,18 +124,16 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, GdkX11GLContextGLX *self = GDK_X11_GL_CONTEXT_GLX (draw_context); GdkGLContext *context = GDK_GL_CONTEXT (draw_context); GdkSurface *surface = gdk_gl_context_get_surface (context); + GdkX11Surface *x11_surface = GDK_X11_SURFACE (surface); GdkDisplay *display = gdk_gl_context_get_display (context); Display *dpy = gdk_x11_display_get_xdisplay (display); GdkX11Display *display_x11 = GDK_X11_DISPLAY (display); - DrawableInfo *info; GLXDrawable drawable; GDK_DRAW_CONTEXT_CLASS (gdk_x11_gl_context_glx_parent_class)->end_frame (draw_context, painted); gdk_gl_context_make_current (context); - info = get_glx_drawable_info (surface); - drawable = gdk_x11_surface_get_glx_drawable (surface); GDK_DISPLAY_NOTE (display, OPENGL, @@ -196,9 +167,7 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, if (has_counter && can_wait) { - guint32 last_counter = info != NULL ? info->last_frame_counter : 0; - - if (last_counter == end_frame_counter) + if (x11_surface->glx_frame_counter == end_frame_counter) maybe_wait_for_vblank (display, drawable); } else if (can_wait) @@ -226,8 +195,8 @@ gdk_x11_gl_context_glx_end_frame (GdkDrawContext *draw_context, glXSwapBuffers (dpy, drawable); - if (self->do_frame_sync && info != NULL && display_x11->has_glx_video_sync) - glXGetVideoSyncSGI (&info->last_frame_counter); + if (self->do_frame_sync && display_x11->has_glx_video_sync) + glXGetVideoSyncSGI (&x11_surface->glx_frame_counter); } static gboolean @@ -550,7 +519,6 @@ gdk_x11_gl_context_glx_realize (GdkGLContext *context, GdkX11GLContextGLX *context_glx; Display *dpy; GdkSurface *surface; - DrawableInfo *info; GdkGLContext *share; gboolean debug_bit, compat_bit, legacy_bit, es_bit; int major, minor, flags; @@ -652,16 +620,6 @@ gdk_x11_gl_context_glx_realize (GdkGLContext *context, /* Ensure that any other context is created with an ES bit set */ gdk_gl_context_set_use_es (context, es_bit); - info = get_glx_drawable_info (surface); - if (info == NULL) - { - info = g_slice_new0 (DrawableInfo); - info->display = display; - info->last_frame_counter = 0; - - set_glx_drawable_info (surface, info); - } - GDK_DISPLAY_NOTE (display, OPENGL, g_message ("Realized GLX context[%p], %s, version: %d.%d", context_glx->glx_context, diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c index 03aea25d3a..dee0fe7cca 100644 --- a/gdk/x11/gdksurface-x11.c +++ b/gdk/x11/gdksurface-x11.c @@ -1633,6 +1633,8 @@ gdk_x11_surface_hide (GdkSurface *surface) g_clear_pointer (&impl->toplevel_layout, gdk_toplevel_layout_unref); gdk_x11_surface_withdraw (surface); + + impl->glx_frame_counter = 0; } static inline void diff --git a/gdk/x11/gdksurface-x11.h b/gdk/x11/gdksurface-x11.h index e2828c87e6..a4c9e53e0a 100644 --- a/gdk/x11/gdksurface-x11.h +++ b/gdk/x11/gdksurface-x11.h @@ -89,6 +89,7 @@ struct _GdkX11Surface cairo_surface_t *cairo_surface; /* EGLSurface */ gpointer egl_surface; /* GLXDrawable */ XID glx_drawable; + guint32 glx_frame_counter; int abs_x; int abs_y;