44
55#include " flutter/shell/platform/linux/public/flutter_linux/fl_engine.h"
66
7+ #include < epoxy/egl.h>
78#include < gmodule.h>
89
910#include < cstring>
1617#include " flutter/shell/platform/linux/fl_display_monitor.h"
1718#include " flutter/shell/platform/linux/fl_engine_private.h"
1819#include " flutter/shell/platform/linux/fl_keyboard_handler.h"
20+ #include " flutter/shell/platform/linux/fl_opengl_manager.h"
1921#include " flutter/shell/platform/linux/fl_pixel_buffer_texture_private.h"
2022#include " flutter/shell/platform/linux/fl_platform_handler.h"
2123#include " flutter/shell/platform/linux/fl_plugin_registrar_private.h"
2224#include " flutter/shell/platform/linux/fl_renderer.h"
23- #include " flutter/shell/platform/linux/fl_renderer_gdk.h"
24- #include " flutter/shell/platform/linux/fl_renderer_headless.h"
2525#include " flutter/shell/platform/linux/fl_settings_handler.h"
2626#include " flutter/shell/platform/linux/fl_texture_gl_private.h"
2727#include " flutter/shell/platform/linux/fl_texture_registrar_private.h"
@@ -51,6 +51,9 @@ struct _FlEngine {
5151 // Renders the Flutter app.
5252 FlRenderer* renderer;
5353
54+ // Manages OpenGL contexts.
55+ FlOpenGLManager* opengl_manager;
56+
5457 // Messenger used to send and receive platform messages.
5558 FlBinaryMessenger* binary_messenger;
5659
@@ -274,25 +277,24 @@ static bool compositor_present_view_callback(
274277// Flutter engine rendering callbacks.
275278
276279static void * fl_engine_gl_proc_resolver (void * user_data, const char * name) {
277- FlEngine* self = static_cast <FlEngine*>(user_data);
278- return fl_renderer_get_proc_address (self->renderer , name);
280+ return reinterpret_cast <void *>(eglGetProcAddress (name));
279281}
280282
281283static bool fl_engine_gl_make_current (void * user_data) {
282284 FlEngine* self = static_cast <FlEngine*>(user_data);
283- fl_renderer_make_current (self->renderer );
285+ fl_opengl_manager_make_current (self->opengl_manager );
284286 return true ;
285287}
286288
287289static bool fl_engine_gl_clear_current (void * user_data) {
288290 FlEngine* self = static_cast <FlEngine*>(user_data);
289- fl_renderer_clear_current (self->renderer );
291+ fl_opengl_manager_clear_current (self->opengl_manager );
290292 return true ;
291293}
292294
293295static uint32_t fl_engine_gl_get_fbo (void * user_data) {
294- FlEngine* self = static_cast <FlEngine*>(user_data);
295- return fl_renderer_get_fbo (self-> renderer ) ;
296+ // There is only one frame buffer object - always return that.
297+ return 0 ;
296298}
297299
298300static bool fl_engine_gl_present (void * user_data) {
@@ -303,7 +305,7 @@ static bool fl_engine_gl_present(void* user_data) {
303305
304306static bool fl_engine_gl_make_resource_current (void * user_data) {
305307 FlEngine* self = static_cast <FlEngine*>(user_data);
306- fl_renderer_make_resource_current (self->renderer );
308+ fl_opengl_manager_make_resource_current (self->opengl_manager );
307309 return true ;
308310}
309311
@@ -483,6 +485,7 @@ static void fl_engine_dispose(GObject* object) {
483485 g_clear_object (&self->project );
484486 g_clear_object (&self->display_monitor );
485487 g_clear_object (&self->renderer );
488+ g_clear_object (&self->opengl_manager );
486489 g_clear_object (&self->texture_registrar );
487490 g_clear_object (&self->binary_messenger );
488491 g_clear_object (&self->settings_handler );
@@ -533,6 +536,8 @@ static void fl_engine_init(FlEngine* self) {
533536 g_warning (" Failed get get engine function pointers" );
534537 }
535538
539+ self->opengl_manager = fl_opengl_manager_new ();
540+
536541 self->display_monitor =
537542 fl_display_monitor_new (self, gdk_display_get_default ());
538543 self->task_runner = fl_task_runner_new (self);
@@ -550,15 +555,13 @@ static void fl_engine_init(FlEngine* self) {
550555}
551556
552557static FlEngine* fl_engine_new_full (FlDartProject* project,
553- FlRenderer* renderer,
554558 FlBinaryMessenger* binary_messenger) {
555559 g_return_val_if_fail (FL_IS_DART_PROJECT (project), nullptr );
556- g_return_val_if_fail (FL_IS_RENDERER (renderer), nullptr );
557560
558561 FlEngine* self = FL_ENGINE (g_object_new (fl_engine_get_type (), nullptr ));
559562
560563 self->project = FL_DART_PROJECT (g_object_ref (project));
561- self->renderer = FL_RENDERER ( g_object_ref (renderer) );
564+ self->renderer = fl_renderer_new (self );
562565 if (binary_messenger != nullptr ) {
563566 self->binary_messenger =
564567 FL_BINARY_MESSENGER (g_object_ref (binary_messenger));
@@ -570,8 +573,6 @@ static FlEngine* fl_engine_new_full(FlDartProject* project,
570573 fl_mouse_cursor_handler_new (self->binary_messenger );
571574 self->windowing_handler = fl_windowing_handler_new (self);
572575
573- fl_renderer_set_engine (self->renderer , self);
574-
575576 return self;
576577}
577578
@@ -581,35 +582,30 @@ FlEngine* fl_engine_for_id(int64_t id) {
581582 return FL_ENGINE (engine);
582583}
583584
584- FlEngine* fl_engine_new_with_renderer (FlDartProject* project,
585- FlRenderer* renderer) {
586- g_return_val_if_fail (FL_IS_DART_PROJECT (project), nullptr );
587- g_return_val_if_fail (FL_IS_RENDERER (renderer), nullptr );
588- return fl_engine_new_full (project, renderer, nullptr );
589- }
590-
591585G_MODULE_EXPORT FlEngine* fl_engine_new (FlDartProject* project) {
592- g_autoptr (FlRendererGdk) renderer = fl_renderer_gdk_new ();
593- return fl_engine_new_with_renderer (project, FL_RENDERER (renderer));
586+ return fl_engine_new_full (project, nullptr );
594587}
595588
596589FlEngine* fl_engine_new_with_binary_messenger (
597590 FlBinaryMessenger* binary_messenger) {
598591 g_autoptr (FlDartProject) project = fl_dart_project_new ();
599- g_autoptr (FlRendererGdk) renderer = fl_renderer_gdk_new ();
600- return fl_engine_new_full (project, FL_RENDERER (renderer), binary_messenger);
592+ return fl_engine_new_full (project, binary_messenger);
601593}
602594
603595G_MODULE_EXPORT FlEngine* fl_engine_new_headless (FlDartProject* project) {
604- g_autoptr (FlRendererHeadless) renderer = fl_renderer_headless_new ();
605- return fl_engine_new_with_renderer (project, FL_RENDERER (renderer));
596+ return fl_engine_new (project);
606597}
607598
608599FlRenderer* fl_engine_get_renderer (FlEngine* self) {
609600 g_return_val_if_fail (FL_IS_ENGINE (self), nullptr );
610601 return self->renderer ;
611602}
612603
604+ FlOpenGLManager* fl_engine_get_opengl_manager (FlEngine* self) {
605+ g_return_val_if_fail (FL_IS_ENGINE (self), nullptr );
606+ return self->opengl_manager ;
607+ }
608+
613609FlDisplayMonitor* fl_engine_get_display_monitor (FlEngine* self) {
614610 g_return_val_if_fail (FL_IS_ENGINE (self), nullptr );
615611 return self->display_monitor ;
0 commit comments