summaryrefslogtreecommitdiff
path: root/gdk/gdkvulkancontext.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-11-28 17:55:46 +0100
committerBenjamin Otte <otte@redhat.com>2016-12-09 18:35:51 +0100
commit4ef8bf821e1e4ba3adfd5981e6542bc0e506c7e9 (patch)
treeb57a0d26ce113c2bae691fe88efeb421261dafc4 /gdk/gdkvulkancontext.c
parent6d1d6e67925035742f70b9d167ab41dfe7075ff3 (diff)
downloadgtk+-4ef8bf821e1e4ba3adfd5981e6542bc0e506c7e9.tar.gz
vulkan: Turn GdkVulkanContext into a GdkDrawContext
Diffstat (limited to 'gdk/gdkvulkancontext.c')
-rw-r--r--gdk/gdkvulkancontext.c151
1 files changed, 14 insertions, 137 deletions
diff --git a/gdk/gdkvulkancontext.c b/gdk/gdkvulkancontext.c
index 04cad65c5c..3ae9b79caf 100644
--- a/gdk/gdkvulkancontext.c
+++ b/gdk/gdkvulkancontext.c
@@ -31,27 +31,14 @@
typedef struct _GdkVulkanContextPrivate GdkVulkanContextPrivate;
struct _GdkVulkanContextPrivate {
- GdkWindow *window;
-
VkSurfaceKHR surface;
};
-enum {
- PROP_0,
-
- PROP_DISPLAY,
- PROP_WINDOW,
-
- LAST_PROP
-};
-
-static GParamSpec *pspecs[LAST_PROP] = { NULL, };
-
G_DEFINE_QUARK (gdk-vulkan-error-quark, gdk_vulkan_error)
static void gdk_vulkan_context_initable_init (GInitableIface *iface);
-G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GdkVulkanContext, gdk_vulkan_context, G_TYPE_OBJECT,
+G_DEFINE_ABSTRACT_TYPE_WITH_CODE (GdkVulkanContext, gdk_vulkan_context, GDK_TYPE_DRAW_CONTEXT,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, gdk_vulkan_context_initable_init)
G_ADD_PRIVATE (GdkVulkanContext))
@@ -60,57 +47,22 @@ gdk_vulkan_context_dispose (GObject *gobject)
{
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (gobject);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
+ GdkDisplay *display;
- gdk_display_unref_vulkan (gdk_vulkan_context_get_display (context));
-
- g_clear_object (&priv->window);
-
- G_OBJECT_CLASS (gdk_vulkan_context_parent_class)->dispose (gobject);
-}
-
-static void
-gdk_vulkan_context_set_property (GObject *gobject,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec)
-{
- GdkVulkanContext *context = GDK_VULKAN_CONTEXT (gobject);
- GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
-
- switch (prop_id)
+ if (priv->surface != VK_NULL_HANDLE)
{
- case PROP_WINDOW:
- priv->window = g_value_dup_object (value);
- g_assert (priv->window != NULL);
- break;
-
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ vkDestroySurfaceKHR (gdk_vulkan_context_get_instance (context),
+ priv->surface,
+ NULL);
+ priv->surface = VK_NULL_HANDLE;
}
-}
-
-static void
-gdk_vulkan_context_get_property (GObject *gobject,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec)
-{
- GdkVulkanContext *context = GDK_VULKAN_CONTEXT (gobject);
- GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
-
- switch (prop_id)
- {
- case PROP_DISPLAY:
- g_value_set_object (value, gdk_vulkan_context_get_display (context));
- break;
- case PROP_WINDOW:
- g_value_set_object (value, priv->window);
- break;
+ /* display will be unset in gdk_draw_context_dispose() */
+ display = gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context));
+ if (display)
+ gdk_display_unref_vulkan (display);
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
- }
+ G_OBJECT_CLASS (gdk_vulkan_context_parent_class)->dispose (gobject);
}
static void
@@ -118,42 +70,7 @@ gdk_vulkan_context_class_init (GdkVulkanContextClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- gobject_class->set_property = gdk_vulkan_context_set_property;
- gobject_class->get_property = gdk_vulkan_context_get_property;
gobject_class->dispose = gdk_vulkan_context_dispose;
-
- /**
- * GdkVulkanContext:display:
- *
- * The #GdkDisplay used to create the #GdkVulkanContext.
- *
- * Since: 3.16
- */
- pspecs[PROP_DISPLAY] =
- g_param_spec_object ("display",
- P_("Display"),
- P_("The GDK display used to create the Vulkan context"),
- GDK_TYPE_DISPLAY,
- G_PARAM_READABLE |
- G_PARAM_STATIC_STRINGS);
-
- /**
- * GdkVulkanContext:window:
- *
- * The #GdkWindow the gl context is bound to.
- *
- * Since: 3.16
- */
- pspecs[PROP_WINDOW] =
- g_param_spec_object ("window",
- P_("Window"),
- P_("The GDK window bound to the Vulkan context"),
- GDK_TYPE_WINDOW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS);
-
- g_object_class_install_properties (gobject_class, LAST_PROP, pspecs);
}
static void
@@ -169,7 +86,7 @@ gdk_vulkan_context_real_init (GInitable *initable,
GdkVulkanContext *context = GDK_VULKAN_CONTEXT (initable);
GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
- if (!gdk_display_ref_vulkan (gdk_vulkan_context_get_display (context), error))
+ if (!gdk_display_ref_vulkan (gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context)), error))
return FALSE;
if (GDK_VULKAN_CONTEXT_GET_CLASS (context)->create_surface (context, &priv->surface) != VK_SUCCESS)
@@ -188,46 +105,6 @@ gdk_vulkan_context_initable_init (GInitableIface *iface)
iface->init = gdk_vulkan_context_real_init;
}
-/**
- * gdk_vulkan_context_get_display:
- * @context: a #GdkVulkanContext
- *
- * Retrieves the #GdkDisplay the @context is created for
- *
- * Returns: (nullable) (transfer none): a #GdkDisplay or %NULL
- *
- * Since: 3.90
- */
-GdkDisplay *
-gdk_vulkan_context_get_display (GdkVulkanContext *context)
-{
- GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
-
- g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (context), NULL);
-
- return priv->window ? gdk_window_get_display (priv->window) : NULL;
-}
-
-/**
- * gdk_vulkan_context_get_window:
- * @context: a #GdkVulkanContext
- *
- * Retrieves the #GdkWindow used by the @context.
- *
- * Returns: (nullable) (transfer none): a #GdkWindow or %NULL
- *
- * Since: 3.90
- */
-GdkWindow *
-gdk_vulkan_context_get_window (GdkVulkanContext *context)
-{
- GdkVulkanContextPrivate *priv = gdk_vulkan_context_get_instance_private (context);
-
- g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (context), NULL);
-
- return priv->window;
-}
-
#ifdef GDK_WINDOWING_VULKAN
VkInstance
@@ -235,7 +112,7 @@ gdk_vulkan_context_get_instance (GdkVulkanContext *context)
{
g_return_val_if_fail (GDK_IS_VULKAN_CONTEXT (context), NULL);
- return gdk_vulkan_context_get_display (context)->vk_instance;
+ return gdk_draw_context_get_display (GDK_DRAW_CONTEXT (context))->vk_instance;
}
static gboolean