Flutter Linux Embedder
fl_renderer_gl.cc File Reference

Go to the source code of this file.

Classes

struct  _FlRendererGL
 

Functions

static gboolean fl_renderer_gl_create_contexts (FlRenderer *renderer, GtkWidget *widget, GdkGLContext **visible, GdkGLContext **resource, GError **error)
 
static gboolean fl_renderer_gl_create_backing_store (FlRenderer *renderer, const FlutterBackingStoreConfig *config, FlutterBackingStore *backing_store_out)
 
static gboolean fl_renderer_gl_collect_backing_store (FlRenderer *renderer, const FlutterBackingStore *backing_store)
 
static gboolean fl_renderer_gl_present_layers (FlRenderer *renderer, const FlutterLayer **layers, size_t layers_count)
 
static void fl_renderer_gl_class_init (FlRendererGLClass *klass)
 
static void fl_renderer_gl_init (FlRendererGL *self)
 
FlRendererGL * fl_renderer_gl_new ()
 

Function Documentation

◆ fl_renderer_gl_class_init()

static void fl_renderer_gl_class_init ( FlRendererGLClass *  klass)
static

Definition at line 123 of file fl_renderer_gl.cc.

123  {
124  FL_RENDERER_CLASS(klass)->create_contexts = fl_renderer_gl_create_contexts;
125  FL_RENDERER_CLASS(klass)->create_backing_store =
127  FL_RENDERER_CLASS(klass)->collect_backing_store =
129  FL_RENDERER_CLASS(klass)->present_layers = fl_renderer_gl_present_layers;
130 }

References fl_renderer_gl_collect_backing_store(), fl_renderer_gl_create_backing_store(), fl_renderer_gl_create_contexts(), and fl_renderer_gl_present_layers().

◆ fl_renderer_gl_collect_backing_store()

static gboolean fl_renderer_gl_collect_backing_store ( FlRenderer *  renderer,
const FlutterBackingStore *  backing_store 
)
static

Definition at line 75 of file fl_renderer_gl.cc.

77  {
78  g_autoptr(GError) error = nullptr;
79  gboolean result = fl_renderer_make_current(renderer, &error);
80  if (!result) {
81  g_warning(
82  "Failed to make renderer current when collecting backing store: %s",
83  error->message);
84  return FALSE;
85  }
86 
87  // OpenGL context is required when destroying #FlBackingStoreProvider.
88  g_object_unref(backing_store->open_gl.framebuffer.user_data);
89  return TRUE;
90 }

References error, fl_renderer_make_current(), result, and TRUE.

Referenced by fl_renderer_gl_class_init().

◆ fl_renderer_gl_create_backing_store()

static gboolean fl_renderer_gl_create_backing_store ( FlRenderer *  renderer,
const FlutterBackingStoreConfig *  config,
FlutterBackingStore *  backing_store_out 
)
static

Definition at line 39 of file fl_renderer_gl.cc.

42  {
43  g_autoptr(GError) error = nullptr;
44  gboolean result = fl_renderer_make_current(renderer, &error);
45  if (!result) {
46  g_warning("Failed to make renderer current when creating backing store: %s",
47  error->message);
48  return FALSE;
49  }
50 
51  FlBackingStoreProvider* provider =
52  fl_backing_store_provider_new(config->size.width, config->size.height);
53  if (!provider) {
54  g_warning("Failed to create backing store");
55  return FALSE;
56  }
57 
58  uint32_t name = fl_backing_store_provider_get_gl_framebuffer_id(provider);
60 
61  backing_store_out->type = kFlutterBackingStoreTypeOpenGL;
62  backing_store_out->open_gl.type = kFlutterOpenGLTargetTypeFramebuffer;
63  backing_store_out->open_gl.framebuffer.user_data = provider;
64  backing_store_out->open_gl.framebuffer.name = name;
65  backing_store_out->open_gl.framebuffer.target = format;
66  backing_store_out->open_gl.framebuffer.destruction_callback = [](void* p) {
67  // Backing store destroyed in fl_renderer_gl_collect_backing_store(), set
68  // on FlutterCompositor.collect_backing_store_callback during engine start.
69  };
70 
71  return TRUE;
72 }

References error, fl_backing_store_provider_get_gl_format(), fl_backing_store_provider_get_gl_framebuffer_id(), fl_backing_store_provider_new(), fl_renderer_make_current(), format, result, and TRUE.

Referenced by fl_renderer_gl_class_init().

◆ fl_renderer_gl_create_contexts()

static gboolean fl_renderer_gl_create_contexts ( FlRenderer *  renderer,
GtkWidget *  widget,
GdkGLContext **  visible,
GdkGLContext **  resource,
GError **  error 
)
static

Definition at line 17 of file fl_renderer_gl.cc.

21  {
22  GdkWindow* window = gtk_widget_get_parent_window(widget);
23 
24  *visible = gdk_window_create_gl_context(window, error);
25 
26  if (*error != nullptr) {
27  return FALSE;
28  }
29 
30  *resource = gdk_window_create_gl_context(window, error);
31 
32  if (*error != nullptr) {
33  return FALSE;
34  }
35  return TRUE;
36 }

References error, and TRUE.

Referenced by fl_renderer_gl_class_init().

◆ fl_renderer_gl_init()

static void fl_renderer_gl_init ( FlRendererGL *  self)
static

Definition at line 132 of file fl_renderer_gl.cc.

132 {}

◆ fl_renderer_gl_new()

FlRendererGL* fl_renderer_gl_new ( )

FlRendererGL:

#FlRendererGL is an implementation of #FlRenderer that renders by OpenGL ES. fl_renderer_gl_new:

Creates an object that allows Flutter to render by OpenGL ES.

Returns: a new #FlRendererGL.

Definition at line 134 of file fl_renderer_gl.cc.

134  {
135  return FL_RENDERER_GL(g_object_new(fl_renderer_gl_get_type(), nullptr));
136 }

Referenced by fl_view_constructed().

◆ fl_renderer_gl_present_layers()

static gboolean fl_renderer_gl_present_layers ( FlRenderer *  renderer,
const FlutterLayer **  layers,
size_t  layers_count 
)
static

Definition at line 93 of file fl_renderer_gl.cc.

95  {
96  FlView* view = fl_renderer_get_view(renderer);
97  GdkGLContext* context = fl_renderer_get_context(renderer);
98  if (!view || !context) {
99  return FALSE;
100  }
101 
102  g_autoptr(GPtrArray) textures = g_ptr_array_new();
103  for (size_t i = 0; i < layers_count; ++i) {
104  const FlutterLayer* layer = layers[i];
105  switch (layer->type) {
106  case kFlutterLayerContentTypeBackingStore: {
107  const FlutterBackingStore* backing_store = layer->backing_store;
108  auto framebuffer = &backing_store->open_gl.framebuffer;
109  g_ptr_array_add(textures, reinterpret_cast<FlBackingStoreProvider*>(
110  framebuffer->user_data));
111  } break;
112  case kFlutterLayerContentTypePlatformView: {
113  // Currently unsupported.
114  } break;
115  }
116  }
117 
118  fl_view_set_textures(view, context, textures);
119 
120  return TRUE;
121 }

References fl_renderer_get_context(), fl_renderer_get_view(), fl_view_set_textures(), and TRUE.

Referenced by fl_renderer_gl_class_init().

fl_renderer_get_view
FlView * fl_renderer_get_view(FlRenderer *self)
Definition: fl_renderer.cc:79
fl_backing_store_provider_get_gl_format
uint32_t fl_backing_store_provider_get_gl_format(FlBackingStoreProvider *self)
Definition: fl_backing_store_provider.cc:80
fl_backing_store_provider_new
FlBackingStoreProvider * fl_backing_store_provider_new(int width, int height)
Definition: fl_backing_store_provider.cc:35
fl_renderer_gl_create_contexts
static gboolean fl_renderer_gl_create_contexts(FlRenderer *renderer, GtkWidget *widget, GdkGLContext **visible, GdkGLContext **resource, GError **error)
Definition: fl_renderer_gl.cc:17
fl_renderer_gl_create_backing_store
static gboolean fl_renderer_gl_create_backing_store(FlRenderer *renderer, const FlutterBackingStoreConfig *config, FlutterBackingStore *backing_store_out)
Definition: fl_renderer_gl.cc:39
TRUE
return TRUE
Definition: fl_pixel_buffer_texture_test.cc:53
fl_renderer_gl_present_layers
static gboolean fl_renderer_gl_present_layers(FlRenderer *renderer, const FlutterLayer **layers, size_t layers_count)
Definition: fl_renderer_gl.cc:93
result
GAsyncResult * result
Definition: fl_text_input_plugin.cc:106
error
const uint8_t uint32_t uint32_t GError ** error
Definition: fl_pixel_buffer_texture_test.cc:40
fl_renderer_gl_collect_backing_store
static gboolean fl_renderer_gl_collect_backing_store(FlRenderer *renderer, const FlutterBackingStore *backing_store)
Definition: fl_renderer_gl.cc:75
fl_view_set_textures
void fl_view_set_textures(FlView *self, GdkGLContext *context, GPtrArray *textures)
Definition: fl_view.cc:749
fl_renderer_make_current
gboolean fl_renderer_make_current(FlRenderer *self, GError **error)
Definition: fl_renderer.cc:95
format
uint32_t uint32_t * format
Definition: fl_texture_registrar_test.cc:41
fl_renderer_get_context
GdkGLContext * fl_renderer_get_context(FlRenderer *self)
Definition: fl_renderer.cc:85
fl_backing_store_provider_get_gl_framebuffer_id
uint32_t fl_backing_store_provider_get_gl_framebuffer_id(FlBackingStoreProvider *self)
Definition: fl_backing_store_provider.cc:66