Flutter Linux Embedder
fl_renderer_gdk.cc File Reference

Go to the source code of this file.

Classes

struct  _FlRendererGdk
 

Functions

static void fl_renderer_gdk_make_current (FlRenderer *renderer)
 
static void fl_renderer_gdk_make_resource_current (FlRenderer *renderer)
 
static void fl_renderer_gdk_clear_current (FlRenderer *renderer)
 
static gdouble fl_renderer_gdk_get_refresh_rate (FlRenderer *renderer)
 
static void fl_renderer_gdk_dispose (GObject *object)
 
static void fl_renderer_gdk_class_init (FlRendererGdkClass *klass)
 
static void fl_renderer_gdk_init (FlRendererGdk *self)
 
FlRendererGdk * fl_renderer_gdk_new ()
 
void fl_renderer_gdk_set_window (FlRendererGdk *self, GdkWindow *window)
 
gboolean fl_renderer_gdk_create_contexts (FlRendererGdk *self, GError **error)
 
GdkGLContext * fl_renderer_gdk_get_context (FlRendererGdk *self)
 

Function Documentation

◆ fl_renderer_gdk_class_init()

static void fl_renderer_gdk_class_init ( FlRendererGdkClass *  klass)
static

Definition at line 70 of file fl_renderer_gdk.cc.

70  {
71  G_OBJECT_CLASS(klass)->dispose = fl_renderer_gdk_dispose;
72 
73  FL_RENDERER_CLASS(klass)->make_current = fl_renderer_gdk_make_current;
74  FL_RENDERER_CLASS(klass)->make_resource_current =
76  FL_RENDERER_CLASS(klass)->clear_current = fl_renderer_gdk_clear_current;
77  FL_RENDERER_CLASS(klass)->get_refresh_rate = fl_renderer_gdk_get_refresh_rate;
78 }

References fl_renderer_gdk_clear_current(), fl_renderer_gdk_dispose(), fl_renderer_gdk_get_refresh_rate(), fl_renderer_gdk_make_current(), and fl_renderer_gdk_make_resource_current().

◆ fl_renderer_gdk_clear_current()

static void fl_renderer_gdk_clear_current ( FlRenderer *  renderer)
static

Definition at line 38 of file fl_renderer_gdk.cc.

38  {
39  gdk_gl_context_clear_current();
40 }

Referenced by fl_renderer_gdk_class_init().

◆ fl_renderer_gdk_create_contexts()

gboolean fl_renderer_gdk_create_contexts ( FlRendererGdk *  renderer,
GError **  error 
)

fl_renderer_gdk_create_contexts: @renderer: an #FlRendererGdk. @error: (allow-none): #GError location to store the error occurring, or NULL to ignore.

Create rendering contexts.

Returns: TRUE if contexts were created, FALSE if there was an error.

Definition at line 95 of file fl_renderer_gdk.cc.

95  {
96  g_return_val_if_fail(FL_IS_RENDERER_GDK(self), FALSE);
97 
98  self->gdk_context = gdk_window_create_gl_context(self->window, error);
99  if (self->gdk_context == nullptr) {
100  return FALSE;
101  }
102  if (!gdk_gl_context_realize(self->gdk_context, error)) {
103  return FALSE;
104  }
105 
106  self->main_context = gdk_window_create_gl_context(self->window, error);
107  if (self->main_context == nullptr) {
108  return FALSE;
109  }
110  if (!gdk_gl_context_realize(self->main_context, error)) {
111  return FALSE;
112  }
113 
114  self->resource_context = gdk_window_create_gl_context(self->window, error);
115  if (self->resource_context == nullptr) {
116  return FALSE;
117  }
118  if (!gdk_gl_context_realize(self->resource_context, error)) {
119  return FALSE;
120  }
121 
122  return TRUE;
123 }

References error, and TRUE.

Referenced by create_context_cb().

◆ fl_renderer_gdk_dispose()

static void fl_renderer_gdk_dispose ( GObject *  object)
static

Definition at line 60 of file fl_renderer_gdk.cc.

60  {
61  FlRendererGdk* self = FL_RENDERER_GDK(object);
62 
63  g_clear_object(&self->gdk_context);
64  g_clear_object(&self->main_context);
65  g_clear_object(&self->resource_context);
66 
67  G_OBJECT_CLASS(fl_renderer_gdk_parent_class)->dispose(object);
68 }

Referenced by fl_renderer_gdk_class_init().

◆ fl_renderer_gdk_get_context()

GdkGLContext* fl_renderer_gdk_get_context ( FlRendererGdk *  renderer)

fl_renderer_gdk_get_context: @renderer: an #FlRendererGdk.

Returns: the main context used for rendering.

Definition at line 125 of file fl_renderer_gdk.cc.

125  {
126  g_return_val_if_fail(FL_IS_RENDERER_GDK(self), nullptr);
127  return self->gdk_context;
128 }

Referenced by create_context_cb().

◆ fl_renderer_gdk_get_refresh_rate()

static gdouble fl_renderer_gdk_get_refresh_rate ( FlRenderer *  renderer)
static

Definition at line 43 of file fl_renderer_gdk.cc.

43  {
44  FlRendererGdk* self = FL_RENDERER_GDK(renderer);
45  GdkDisplay* display = gdk_window_get_display(self->window);
46  GdkMonitor* monitor =
47  gdk_display_get_monitor_at_window(display, self->window);
48  if (monitor == nullptr) {
49  return -1.0;
50  }
51 
52  int refresh_rate = gdk_monitor_get_refresh_rate(monitor);
53  if (refresh_rate <= 0) {
54  return -1.0;
55  }
56  // the return value is in milli-hertz, convert to hertz
57  return static_cast<gdouble>(refresh_rate) / 1000.0;
58 }

Referenced by fl_renderer_gdk_class_init().

◆ fl_renderer_gdk_init()

static void fl_renderer_gdk_init ( FlRendererGdk *  self)
static

Definition at line 80 of file fl_renderer_gdk.cc.

80 {}

◆ fl_renderer_gdk_make_current()

static void fl_renderer_gdk_make_current ( FlRenderer *  renderer)
static

Definition at line 26 of file fl_renderer_gdk.cc.

26  {
27  FlRendererGdk* self = FL_RENDERER_GDK(renderer);
28  gdk_gl_context_make_current(self->main_context);
29 }

Referenced by fl_renderer_gdk_class_init().

◆ fl_renderer_gdk_make_resource_current()

static void fl_renderer_gdk_make_resource_current ( FlRenderer *  renderer)
static

Definition at line 32 of file fl_renderer_gdk.cc.

32  {
33  FlRendererGdk* self = FL_RENDERER_GDK(renderer);
34  gdk_gl_context_make_current(self->resource_context);
35 }

Referenced by fl_renderer_gdk_class_init().

◆ fl_renderer_gdk_new()

FlRendererGdk* fl_renderer_gdk_new ( )

Definition at line 82 of file fl_renderer_gdk.cc.

82  {
83  FlRendererGdk* self =
84  FL_RENDERER_GDK(g_object_new(fl_renderer_gdk_get_type(), nullptr));
85  return self;
86 }

Referenced by fl_view_constructed().

◆ fl_renderer_gdk_set_window()

void fl_renderer_gdk_set_window ( FlRendererGdk *  renderer,
GdkWindow *  window 
)

fl_renderer_gdk_set_window: @renderer: an #FlRendererGdk. @window: the window that is being rendered on.

Set the window that is being rendered on. This is only called once when the window is available.

Definition at line 88 of file fl_renderer_gdk.cc.

88  {
89  g_return_if_fail(FL_IS_RENDERER_GDK(self));
90 
91  g_assert(self->window == nullptr);
92  self->window = window;
93 }

Referenced by create_context_cb().

fl_renderer_gdk_clear_current
static void fl_renderer_gdk_clear_current(FlRenderer *renderer)
Definition: fl_renderer_gdk.cc:38
fl_renderer_gdk_make_resource_current
static void fl_renderer_gdk_make_resource_current(FlRenderer *renderer)
Definition: fl_renderer_gdk.cc:32
TRUE
return TRUE
Definition: fl_pixel_buffer_texture_test.cc:53
fl_renderer_gdk_get_refresh_rate
static gdouble fl_renderer_gdk_get_refresh_rate(FlRenderer *renderer)
Definition: fl_renderer_gdk.cc:43
error
const uint8_t uint32_t uint32_t GError ** error
Definition: fl_pixel_buffer_texture_test.cc:40
fl_renderer_gdk_make_current
static void fl_renderer_gdk_make_current(FlRenderer *renderer)
Definition: fl_renderer_gdk.cc:26
fl_renderer_gdk_dispose
static void fl_renderer_gdk_dispose(GObject *object)
Definition: fl_renderer_gdk.cc:60