mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-13 04:10:13 +00:00
99 lines
2.3 KiB
C
99 lines
2.3 KiB
C
|
#include "config.h"
|
||
|
|
||
|
#include "gskvulkanrendererprivate.h"
|
||
|
|
||
|
#include "gskdebugprivate.h"
|
||
|
#include "gskrendererprivate.h"
|
||
|
#include "gskrendernodeiter.h"
|
||
|
#include "gskrendernodeprivate.h"
|
||
|
#include "gsktextureprivate.h"
|
||
|
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
typedef struct {
|
||
|
GQuark cpu_time;
|
||
|
GQuark gpu_time;
|
||
|
} ProfileTimers;
|
||
|
#endif
|
||
|
|
||
|
struct _GskVulkanRenderer
|
||
|
{
|
||
|
GskRenderer parent_instance;
|
||
|
|
||
|
GdkVulkanContext *vulkan;
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
ProfileTimers profile_timers;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
struct _GskVulkanRendererClass
|
||
|
{
|
||
|
GskRendererClass parent_class;
|
||
|
};
|
||
|
|
||
|
G_DEFINE_TYPE (GskVulkanRenderer, gsk_vulkan_renderer, GSK_TYPE_RENDERER)
|
||
|
|
||
|
static gboolean
|
||
|
gsk_vulkan_renderer_realize (GskRenderer *renderer,
|
||
|
GdkWindow *window,
|
||
|
GError **error)
|
||
|
{
|
||
|
GskVulkanRenderer *self = GSK_VULKAN_RENDERER (renderer);
|
||
|
|
||
|
self->vulkan = gdk_window_create_vulkan_context (window, error);
|
||
|
if (self->vulkan == NULL)
|
||
|
return FALSE;
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gsk_vulkan_renderer_unrealize (GskRenderer *renderer)
|
||
|
{
|
||
|
GskVulkanRenderer *self = GSK_VULKAN_RENDERER (renderer);
|
||
|
|
||
|
g_clear_object (&self->vulkan);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gsk_vulkan_renderer_render (GskRenderer *renderer,
|
||
|
GskRenderNode *root)
|
||
|
{
|
||
|
GskVulkanRenderer *self = GSK_VULKAN_RENDERER (renderer);
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
GskProfiler *profiler;
|
||
|
gint64 cpu_time;
|
||
|
#endif
|
||
|
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
profiler = gsk_renderer_get_profiler (renderer);
|
||
|
gsk_profiler_timer_begin (profiler, self->profile_timers.cpu_time);
|
||
|
#endif
|
||
|
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
cpu_time = gsk_profiler_timer_end (profiler, self->profile_timers.cpu_time);
|
||
|
gsk_profiler_timer_set (profiler, self->profile_timers.cpu_time, cpu_time);
|
||
|
|
||
|
gsk_profiler_push_samples (profiler);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gsk_vulkan_renderer_class_init (GskVulkanRendererClass *klass)
|
||
|
{
|
||
|
GskRendererClass *renderer_class = GSK_RENDERER_CLASS (klass);
|
||
|
|
||
|
renderer_class->realize = gsk_vulkan_renderer_realize;
|
||
|
renderer_class->unrealize = gsk_vulkan_renderer_unrealize;
|
||
|
renderer_class->render = gsk_vulkan_renderer_render;
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
gsk_vulkan_renderer_init (GskVulkanRenderer *self)
|
||
|
{
|
||
|
#ifdef G_ENABLE_DEBUG
|
||
|
GskProfiler *profiler = gsk_renderer_get_profiler (GSK_RENDERER (self));
|
||
|
|
||
|
self->profile_timers.cpu_time = gsk_profiler_add_timer (profiler, "cpu-time", "CPU time", FALSE, TRUE);
|
||
|
#endif
|
||
|
}
|