[gtk] x11: Make the frame clock work in GL and Vulkan
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk] x11: Make the frame clock work in GL and Vulkan
- Date: Fri, 30 Mar 2018 15:03:08 +0000 (UTC)
commit 7201e6312041bb5a778dfe47e944a9edda1e2e5a
Author: Benjamin Otte <otte redhat com>
Date: Fri Mar 30 10:43:26 2018 +0200
x11: Make the frame clock work in GL and Vulkan
gdk/x11/gdkglcontext-x11.c | 2 ++
gdk/x11/gdksurface-x11.c | 14 +++++++-------
gdk/x11/gdksurface-x11.h | 2 ++
gdk/x11/gdkvulkancontext-x11.c | 15 +++++++++++++++
4 files changed, 26 insertions(+), 7 deletions(-)
---
diff --git a/gdk/x11/gdkglcontext-x11.c b/gdk/x11/gdkglcontext-x11.c
index c5f104fde5..8eca015b1c 100644
--- a/gdk/x11/gdkglcontext-x11.c
+++ b/gdk/x11/gdkglcontext-x11.c
@@ -182,6 +182,8 @@ gdk_x11_gl_context_end_frame (GdkDrawContext *draw_context,
}
}
+ gdk_x11_surface_pre_damage (surface);
+
glXSwapBuffers (dpy, drawable);
if (context_x11->do_frame_sync && info != NULL && display_x11->has_glx_video_sync)
diff --git a/gdk/x11/gdksurface-x11.c b/gdk/x11/gdksurface-x11.c
index 54a101eb91..29385afb7e 100644
--- a/gdk/x11/gdksurface-x11.c
+++ b/gdk/x11/gdksurface-x11.c
@@ -229,8 +229,8 @@ set_sync_counter(Display *display,
XSyncSetCounter (display, counter, sync_value);
}
-static void
-surface_pre_damage (GdkSurface *surface)
+void
+gdk_x11_surface_pre_damage (GdkSurface *surface)
{
GdkSurface *toplevel_surface = gdk_surface_get_toplevel (surface);
GdkSurfaceImplX11 *impl;
@@ -257,7 +257,7 @@ on_surface_changed (void *data)
GdkSurfaceImplX11 *impl = GDK_SURFACE_IMPL_X11 (surface->impl);
if (impl->tracking_damage)
- surface_pre_damage (surface);
+ gdk_x11_surface_pre_damage (surface);
}
/* We want to know when cairo drawing causes damage to the window,
@@ -372,14 +372,14 @@ gdk_x11_surface_begin_frame (GdkSurface *surface,
impl->toplevel->configure_counter_value = 0;
- surface_pre_damage (surface);
+ gdk_x11_surface_pre_damage (surface);
}
else if (force_frame)
{
/* When mapping the surface, we really want to freeze the
rendering of the surface by the compositor until we've
actually painted something into the surface's buffer. */
- surface_pre_damage (surface);
+ gdk_x11_surface_pre_damage (surface);
}
else
{
@@ -1511,7 +1511,7 @@ surface_x11_resize (GdkSurface *surface,
if (height < 1)
height = 1;
- surface_pre_damage (surface);
+ gdk_x11_surface_pre_damage (surface);
XResizeWindow (GDK_SURFACE_XDISPLAY (surface),
GDK_SURFACE_XID (surface),
@@ -1547,7 +1547,7 @@ surface_x11_move_resize (GdkSurface *surface,
if (height < 1)
height = 1;
- surface_pre_damage (surface);
+ gdk_x11_surface_pre_damage (surface);
XMoveResizeWindow (GDK_SURFACE_XDISPLAY (surface),
GDK_SURFACE_XID (surface),
diff --git a/gdk/x11/gdksurface-x11.h b/gdk/x11/gdksurface-x11.h
index 1beda132d8..07c67d6666 100644
--- a/gdk/x11/gdksurface-x11.h
+++ b/gdk/x11/gdksurface-x11.h
@@ -194,6 +194,8 @@ void _gdk_x11_surface_update_size (GdkSurfaceImplX11 *impl);
void _gdk_x11_surface_set_surface_scale (GdkSurface *window,
int scale);
+void gdk_x11_surface_pre_damage (GdkSurface *surface);
+
G_END_DECLS
#endif /* __GDK_SURFACE_X11_H__ */
diff --git a/gdk/x11/gdkvulkancontext-x11.c b/gdk/x11/gdkvulkancontext-x11.c
index c59dbe3dec..733acd93b6 100644
--- a/gdk/x11/gdkvulkancontext-x11.c
+++ b/gdk/x11/gdkvulkancontext-x11.c
@@ -58,10 +58,25 @@ gdk_x11_vulkan_context_create_surface (GdkVulkanContext *context,
surface);
}
+static void
+gdk_x11_vulkan_context_end_frame (GdkDrawContext *context,
+ cairo_region_t *painted,
+ cairo_region_t *damage)
+{
+ GdkSurface *surface = gdk_draw_context_get_surface (context);
+
+ gdk_x11_surface_pre_damage (surface);
+
+ GDK_DRAW_CONTEXT_CLASS (gdk_x11_vulkan_context_parent_class)->end_frame (context, painted, damage);
+}
+
static void
gdk_x11_vulkan_context_class_init (GdkX11VulkanContextClass *klass)
{
GdkVulkanContextClass *context_class = GDK_VULKAN_CONTEXT_CLASS (klass);
+ GdkDrawContextClass *draw_context_class = GDK_DRAW_CONTEXT_CLASS (klass);
+
+ draw_context_class->end_frame = gdk_x11_vulkan_context_end_frame;
context_class->create_surface = gdk_x11_vulkan_context_create_surface;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]