[gtk/wip/chergert/for-4-6: 29/56] macos: use GdkMacosBuffer for storing damage region
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/for-4-6: 29/56] macos: use GdkMacosBuffer for storing damage region
- Date: Wed, 16 Mar 2022 19:25:45 +0000 (UTC)
commit 50e2a8239b100a26b3d91245249e8b27083481c2
Author: Christian Hergert <christian hergert me>
Date: Wed Mar 2 00:36:17 2022 -0800
macos: use GdkMacosBuffer for storing damage region
The GdkMacosBuffer object already has storage for tracking the damage
region as it is used in GdkMacosCairoContext to manually copy regions from
the front buffer to the back buffer. This makes the GdkMacosGLContext also
use that field so that we can easily drop old damage regions when the
buffer is lost. This happens during resizes, monitor changes, etc.
gdk/macos/gdkmacosglcontext-private.h | 2 --
gdk/macos/gdkmacosglcontext.c | 19 ++++++++++---------
2 files changed, 10 insertions(+), 11 deletions(-)
---
diff --git a/gdk/macos/gdkmacosglcontext-private.h b/gdk/macos/gdkmacosglcontext-private.h
index 8b3eac2ca6..7355ffef90 100644
--- a/gdk/macos/gdkmacosglcontext-private.h
+++ b/gdk/macos/gdkmacosglcontext-private.h
@@ -38,8 +38,6 @@ struct _GdkMacosGLContext
{
GdkGLContext parent_instance;
- cairo_region_t *damage;
-
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
CGLContextObj cgl_context;
G_GNUC_END_IGNORE_DEPRECATIONS
diff --git a/gdk/macos/gdkmacosglcontext.c b/gdk/macos/gdkmacosglcontext.c
index 5baff95a9b..ff7ae975c8 100644
--- a/gdk/macos/gdkmacosglcontext.c
+++ b/gdk/macos/gdkmacosglcontext.c
@@ -469,6 +469,7 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
buffer = _gdk_macos_surface_get_buffer (GDK_MACOS_SURFACE (surface));
_gdk_macos_buffer_set_flipped (buffer, TRUE);
+ _gdk_macos_buffer_set_damage (buffer, region);
/* Create our render target and bind it */
gdk_gl_context_make_current (GDK_GL_CONTEXT (self));
@@ -476,9 +477,6 @@ gdk_macos_gl_context_begin_frame (GdkDrawContext *context,
GDK_DRAW_CONTEXT_CLASS (gdk_macos_gl_context_parent_class)->begin_frame (context, prefers_high_depth,
region);
- g_clear_pointer (&self->damage, cairo_region_destroy);
- self->damage = g_steal_pointer (©);
-
gdk_gl_context_make_current (GDK_GL_CONTEXT (self));
CHECK_GL (NULL, glBindFramebuffer (GL_FRAMEBUFFER, self->fbo));
}
@@ -531,8 +529,6 @@ gdk_macos_gl_context_surface_resized (GdkDrawContext *draw_context)
g_assert (GDK_IS_MACOS_GL_CONTEXT (self));
- g_clear_pointer (&self->damage, cairo_region_destroy);
-
if (self->cgl_context != NULL)
CGLUpdateContext (self->cgl_context);
}
@@ -587,9 +583,16 @@ static cairo_region_t *
gdk_macos_gl_context_get_damage (GdkGLContext *context)
{
GdkMacosGLContext *self = (GdkMacosGLContext *)context;
+ const cairo_region_t *damage;
+ GdkMacosBuffer *buffer;
+ GdkSurface *surface;
- if (self->damage)
- return cairo_region_copy (self->damage);
+ g_assert (GDK_IS_MACOS_GL_CONTEXT (self));
+
+ if ((surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (context))) &&
+ (buffer = GDK_MACOS_SURFACE (surface)->front) &&
+ (damage = _gdk_macos_buffer_get_damage (buffer)))
+ return cairo_region_copy (damage);
return GDK_GL_CONTEXT_CLASS (gdk_macos_gl_context_parent_class)->get_damage (context);
}
@@ -619,8 +622,6 @@ gdk_macos_gl_context_dispose (GObject *gobject)
CGLDestroyContext (cgl_context);
}
- g_clear_pointer (&self->damage, cairo_region_destroy);
-
G_OBJECT_CLASS (gdk_macos_gl_context_parent_class)->dispose (gobject);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]