diff options
author | Matthias Clasen <mclasen@redhat.com> | 2023-04-25 11:03:51 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2023-04-25 11:03:51 +0200 |
commit | f3d84fd513000d3f15068d1c81feb8c77b1863c7 (patch) | |
tree | 4164785099cd50ce3aa8c68c09d4fbd5434f7e24 | |
parent | 318faf7b0de53449e4c5fb425f2561f1b1c68f8c (diff) | |
download | gtk+-f3d84fd513000d3f15068d1c81feb8c77b1863c7.tar.gz |
gltexture: Optionally take a sync object
Add a new (private, for now) constructor takes
a GLsync together with a texture id, for synchronization.
-rw-r--r-- | gdk/gdkgltexture.c | 8 | ||||
-rw-r--r-- | gdk/gdkgltexturebuilder.c | 62 | ||||
-rw-r--r-- | gdk/gdkgltexturebuilder.h | 6 | ||||
-rw-r--r-- | gdk/gdkgltextureprivate.h | 3 |
4 files changed, 78 insertions, 1 deletions
diff --git a/gdk/gdkgltexture.c b/gdk/gdkgltexture.c index 167f9ca1b0..e6c1a0369b 100644 --- a/gdk/gdkgltexture.c +++ b/gdk/gdkgltexture.c @@ -39,6 +39,7 @@ struct _GdkGLTexture { GdkGLContext *context; guint id; gboolean has_mipmap; + gpointer sync; GdkTexture *saved; @@ -296,6 +297,12 @@ gdk_gl_texture_has_mipmap (GdkGLTexture *self) return self->has_mipmap; } +gpointer +gdk_gl_texture_get_sync (GdkGLTexture *self) +{ + return self->sync; +} + /** * gdk_gl_texture_release: * @self: a `GdkTexture` wrapping a GL texture @@ -337,6 +344,7 @@ gdk_gl_texture_new_from_builder (GdkGLTextureBuilder *builder, self->id = gdk_gl_texture_builder_get_id (builder); GDK_TEXTURE (self)->format = gdk_gl_texture_builder_get_format (builder); self->has_mipmap = gdk_gl_texture_builder_get_has_mipmap (builder); + self->sync = gdk_gl_texture_builder_get_sync (builder); self->destroy = destroy; self->data = data; diff --git a/gdk/gdkgltexturebuilder.c b/gdk/gdkgltexturebuilder.c index a6e7bd56fd..16839f5bee 100644 --- a/gdk/gdkgltexturebuilder.c +++ b/gdk/gdkgltexturebuilder.c @@ -35,6 +35,7 @@ struct _GdkGLTextureBuilder int height; GdkMemoryFormat format; gboolean has_mipmap; + gpointer sync; }; struct _GdkGLTextureBuilderClass @@ -68,6 +69,7 @@ enum PROP_HAS_MIPMAP, PROP_HEIGHT, PROP_ID, + PROP_SYNC, PROP_WIDTH, N_PROPS @@ -117,6 +119,10 @@ gdk_gl_texture_builder_get_property (GObject *object, g_value_set_uint (value, self->id); break; + case PROP_SYNC: + g_value_set_pointer (value, self->sync); + break; + case PROP_WIDTH: g_value_set_int (value, self->width); break; @@ -157,6 +163,10 @@ gdk_gl_texture_builder_set_property (GObject *object, gdk_gl_texture_builder_set_id (self, g_value_get_uint (value)); break; + case PROP_SYNC: + gdk_gl_texture_builder_set_sync (self, g_value_get_pointer (value)); + break; + case PROP_WIDTH: gdk_gl_texture_builder_set_width (self, g_value_get_int (value)); break; @@ -238,6 +248,17 @@ gdk_gl_texture_builder_class_init (GdkGLTextureBuilderClass *klass) G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); /** + * GdkGLTextureBuilder:sync: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_sync org.gdk.Property.set=gdk_gl_texture_builder_set_sync) + * + * An optional sync object to wait on before using the texture. + * + * Since: 4.12 + */ + properties[PROP_SYNC] = + g_param_spec_pointer ("sync", NULL, NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + + /** * GdkGLTextureBuilder:width: (attributes org.gdk.Property.get=gdk_gl_texture_builder_get_width org.gdk.Property.set=gdk_gl_texture_builder_set_width) * * The width of the texture. @@ -495,6 +516,47 @@ gdk_gl_texture_builder_set_has_mipmap (GdkGLTextureBuilder *self, } /** + * gdk_gl_texture_builder_get_sync: (attributes org.gdk.Method.get_property=sync) + * @self: a `GdkGLTextureBuilder` + * + * Gets the GLSync object associated with the texture builder. + * + * Returns: (nullable): the GLSync object + * + * Since: 4.12 + */ +gpointer +gdk_gl_texture_builder_get_sync (GdkGLTextureBuilder *self) +{ + g_return_val_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self), NULL); + + return self->sync; +} + +/** + * gdk_gl_texture_builder_set_sync: (attributes org.gdk.Method.set_property=sync) + * @self: a `GdkGLTextureBuilder` + * @sync: (nullable): the GLSync object + * + * Sets the GLSync object to use for the texture. + * + * Since: 4.12 + */ +void +gdk_gl_texture_builder_set_sync (GdkGLTextureBuilder *self, + gpointer sync) +{ + g_return_if_fail (GDK_IS_GL_TEXTURE_BUILDER (self)); + + if (self->sync == sync) + return; + + self->sync = sync; + + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SYNC]); +} + +/** * gdk_gl_texture_builder_get_format: (attributes org.gdk.Method.get_property=format) * @self: a `GdkGLTextureBuilder` * diff --git a/gdk/gdkgltexturebuilder.h b/gdk/gdkgltexturebuilder.h index 1633bca1c2..03ee185e0c 100644 --- a/gdk/gdkgltexturebuilder.h +++ b/gdk/gdkgltexturebuilder.h @@ -73,6 +73,12 @@ void gdk_gl_texture_builder_set_has_mipmap (GdkGLTextureBui gboolean has_mipmap); GDK_AVAILABLE_IN_4_12 +gpointer gdk_gl_texture_builder_get_sync (GdkGLTextureBuilder *self) G_GNUC_PURE; +GDK_AVAILABLE_IN_4_12 +void gdk_gl_texture_builder_set_sync (GdkGLTextureBuilder *self, + gpointer sync); + +GDK_AVAILABLE_IN_4_12 GdkTexture * gdk_gl_texture_builder_build (GdkGLTextureBuilder *self, GDestroyNotify destroy, gpointer data); diff --git a/gdk/gdkgltextureprivate.h b/gdk/gdkgltextureprivate.h index eae09290a9..c2841fb55e 100644 --- a/gdk/gdkgltextureprivate.h +++ b/gdk/gdkgltextureprivate.h @@ -10,11 +10,12 @@ G_BEGIN_DECLS GdkTexture * gdk_gl_texture_new_from_builder (GdkGLTextureBuilder *builder, GDestroyNotify destroy, gpointer data); - + GdkGLContext * gdk_gl_texture_get_context (GdkGLTexture *self); guint gdk_gl_texture_get_id (GdkGLTexture *self); gboolean gdk_gl_texture_has_mipmap (GdkGLTexture *self); +gpointer gdk_gl_texture_get_sync (GdkGLTexture *self); G_END_DECLS |