mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-14 14:20:21 +00:00
daadaf8448
This way GL and Vulkan can run custom code to import GL textures and dmabufs. This function also decides if and how to cache the textures it creates.
82 lines
5.4 KiB
C
82 lines
5.4 KiB
C
#pragma once
|
|
|
|
#include "gskgpubufferwriterprivate.h"
|
|
#include "gskgpurenderer.h"
|
|
#include "gskgputypesprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GSK_TYPE_GPU_FRAME (gsk_gpu_frame_get_type ())
|
|
#define GSK_GPU_FRAME(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSK_TYPE_GPU_FRAME, GskGpuFrame))
|
|
#define GSK_GPU_FRAME_CLASS(k) (G_TYPE_CHECK_CLASS_CAST ((k), GSK_TYPE_GPU_FRAME, GskGpuFrameClass))
|
|
#define GSK_IS_GPU_FRAME(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSK_TYPE_GPU_FRAME))
|
|
#define GSK_IS_GPU_FRAME_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSK_TYPE_GPU_FRAME))
|
|
#define GSK_GPU_FRAME_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSK_TYPE_GPU_FRAME, GskGpuFrameClass))
|
|
|
|
typedef struct _GskGpuFrameClass GskGpuFrameClass;
|
|
|
|
struct _GskGpuFrame
|
|
{
|
|
GObject parent_instance;
|
|
};
|
|
|
|
struct _GskGpuFrameClass
|
|
{
|
|
GObjectClass parent_class;
|
|
|
|
gboolean (* is_busy) (GskGpuFrame *self);
|
|
void (* setup) (GskGpuFrame *self);
|
|
void (* cleanup) (GskGpuFrame *self);
|
|
GskGpuImage * (* upload_texture) (GskGpuFrame *self,
|
|
GdkTexture *texture);
|
|
GskGpuDescriptors * (* create_descriptors) (GskGpuFrame *self);
|
|
GskGpuBuffer * (* create_vertex_buffer) (GskGpuFrame *self,
|
|
gsize size);
|
|
GskGpuBuffer * (* create_storage_buffer) (GskGpuFrame *self,
|
|
gsize size);
|
|
void (* submit) (GskGpuFrame *self,
|
|
GskGpuBuffer *vertex_buffer,
|
|
GskGpuBuffer *storage_buffer,
|
|
GskGpuOp *op);
|
|
};
|
|
|
|
GType gsk_gpu_frame_get_type (void) G_GNUC_CONST;
|
|
|
|
|
|
void gsk_gpu_frame_setup (GskGpuFrame *self,
|
|
GskGpuRenderer *renderer,
|
|
GskGpuDevice *device,
|
|
GskGpuOptimizations optimizations);
|
|
|
|
GdkDrawContext * gsk_gpu_frame_get_context (GskGpuFrame *self) G_GNUC_PURE;
|
|
GskGpuDevice * gsk_gpu_frame_get_device (GskGpuFrame *self) G_GNUC_PURE;
|
|
gint64 gsk_gpu_frame_get_timestamp (GskGpuFrame *self) G_GNUC_PURE;
|
|
gboolean gsk_gpu_frame_should_optimize (GskGpuFrame *self,
|
|
GskGpuOptimizations optimization) G_GNUC_PURE;
|
|
|
|
gpointer gsk_gpu_frame_alloc_op (GskGpuFrame *self,
|
|
gsize size);
|
|
GskGpuImage * gsk_gpu_frame_upload_texture (GskGpuFrame *self,
|
|
GdkTexture *texture);
|
|
GskGpuDescriptors * gsk_gpu_frame_create_descriptors (GskGpuFrame *self);
|
|
gsize gsk_gpu_frame_reserve_vertex_data (GskGpuFrame *self,
|
|
gsize size);
|
|
guchar * gsk_gpu_frame_get_vertex_data (GskGpuFrame *self,
|
|
gsize offset);
|
|
void gsk_gpu_frame_write_buffer_memory (GskGpuFrame *self,
|
|
GskGpuBufferWriter *writer);
|
|
|
|
gboolean gsk_gpu_frame_is_busy (GskGpuFrame *self);
|
|
|
|
void gsk_gpu_frame_render (GskGpuFrame *self,
|
|
gint64 timestamp,
|
|
GskGpuImage *target,
|
|
const cairo_region_t *region,
|
|
GskRenderNode *node,
|
|
const graphene_rect_t *viewport,
|
|
GdkTexture **texture);
|
|
|
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(GskGpuFrame, g_object_unref)
|
|
|
|
G_END_DECLS
|