14 G_DEFINE_TYPE(FlRendererGL, fl_renderer_gl, fl_renderer_get_type())
19 GdkGLContext** visible,
20 GdkGLContext** resource,
22 GdkWindow* window = gtk_widget_get_parent_window(widget);
24 *visible = gdk_window_create_gl_context(window,
error);
26 if (*
error !=
nullptr) {
30 *resource = gdk_window_create_gl_context(window,
error);
32 if (*
error !=
nullptr) {
41 const FlutterBackingStoreConfig* config,
42 FlutterBackingStore* backing_store_out) {
43 g_autoptr(GError)
error =
nullptr;
46 g_warning(
"Failed to make renderer current when creating backing store: %s",
51 FlBackingStoreProvider* provider =
54 g_warning(
"Failed to create backing store");
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) {
77 const FlutterBackingStore* backing_store) {
78 g_autoptr(GError)
error =
nullptr;
82 "Failed to make renderer current when collecting backing store: %s",
88 g_object_unref(backing_store->open_gl.framebuffer.user_data);
94 const FlutterLayer** layers,
95 size_t layers_count) {
98 if (!view || !context) {
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));
112 case kFlutterLayerContentTypePlatformView: {
125 FL_RENDERER_CLASS(klass)->create_backing_store =
127 FL_RENDERER_CLASS(klass)->collect_backing_store =
135 return FL_RENDERER_GL(g_object_new(fl_renderer_gl_get_type(),
nullptr));