summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2023-04-25 11:03:51 +0200
committerMatthias Clasen <mclasen@redhat.com>2023-04-25 11:03:51 +0200
commitf3d84fd513000d3f15068d1c81feb8c77b1863c7 (patch)
tree4164785099cd50ce3aa8c68c09d4fbd5434f7e24
parent318faf7b0de53449e4c5fb425f2561f1b1c68f8c (diff)
downloadgtk+-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.c8
-rw-r--r--gdk/gdkgltexturebuilder.c62
-rw-r--r--gdk/gdkgltexturebuilder.h6
-rw-r--r--gdk/gdkgltextureprivate.h3
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