mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-15 23:00:08 +00:00
9045431bde
Use glDrawArraysInstancedBaseInstance() to draw. (Yay for GL naming.) That allows setting up the offset in the vertex array without having to glVertexAttribPointer() everything again. However, this is only supported since GL 4.2 and not at all in stock GLES, so we need to have code that can work without it. Fortunately, it is mandatory in Vulkan, so every recent GPU supports it. And if that GPU has a proper driver, it will also expose the GL extension for it. (Hint: You can check https://opengles.gpuinfo.org/listextensions.php for how many proper drivers exist outside of Mesa.)
48 lines
2.2 KiB
C
48 lines
2.2 KiB
C
#pragma once
|
|
|
|
#include "gskgpurenderer.h"
|
|
|
|
#include "gskgputypesprivate.h"
|
|
#include "gskrendererprivate.h"
|
|
|
|
G_BEGIN_DECLS
|
|
|
|
#define GSK_GPU_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GSK_TYPE_GPU_RENDERER, GskGpuRendererClass))
|
|
#define GSK_IS_GPU_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GSK_TYPE_GPU_RENDERER))
|
|
#define GSK_GPU_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GSK_TYPE_GPU_RENDERER, GskGpuRendererClass))
|
|
|
|
typedef struct _GskGpuRendererClass GskGpuRendererClass;
|
|
|
|
struct _GskGpuRenderer
|
|
{
|
|
GskRenderer parent_instance;
|
|
};
|
|
|
|
struct _GskGpuRendererClass
|
|
{
|
|
GskRendererClass parent_class;
|
|
|
|
GType frame_type;
|
|
GskGpuOptimizations optimizations; /* subclasses cannot override this */
|
|
|
|
GskGpuDevice * (* get_device) (GdkDisplay *display,
|
|
GError **error);
|
|
GdkDrawContext * (* create_context) (GskGpuRenderer *self,
|
|
GdkDisplay *display,
|
|
GdkSurface *surface,
|
|
GskGpuOptimizations *supported,
|
|
GError **error);
|
|
|
|
void (* make_current) (GskGpuRenderer *self);
|
|
GskGpuImage * (* get_backbuffer) (GskGpuRenderer *self);
|
|
void (* wait) (GskGpuRenderer *self,
|
|
GskGpuFrame **frame,
|
|
gsize n_frames);
|
|
};
|
|
|
|
GdkDrawContext * gsk_gpu_renderer_get_context (GskGpuRenderer *self);
|
|
GskGpuDevice * gsk_gpu_renderer_get_device (GskGpuRenderer *self);
|
|
|
|
G_END_DECLS
|
|
|