Flutter Engine
 
Loading...
Searching...
No Matches
flutter::EmbedderSurfaceGLImpeller Class Referencefinal

#include <embedder_surface_gl_impeller.h>

Inheritance diagram for flutter::EmbedderSurfaceGLImpeller:
flutter::EmbedderSurface flutter::GPUSurfaceGLDelegate

Public Member Functions

 EmbedderSurfaceGLImpeller (EmbedderSurfaceGLSkia::GLDispatchTable gl_dispatch_table, bool fbo_reset_after_present, std::shared_ptr< EmbedderExternalViewEmbedder > external_view_embedder)
 
 ~EmbedderSurfaceGLImpeller () override
 
- Public Member Functions inherited from flutter::EmbedderSurface
 EmbedderSurface ()
 
virtual ~EmbedderSurface ()
 
- Public Member Functions inherited from flutter::GPUSurfaceGLDelegate
 ~GPUSurfaceGLDelegate ()
 
virtual void GLContextSetDamageRegion (const std::optional< DlIRect > &region)
 
virtual sk_sp< const GrGLInterface > GetGLInterface () const
 
virtual bool AllowsDrawingWhenGpuDisabled () const
 

Additional Inherited Members

- Public Types inherited from flutter::GPUSurfaceGLDelegate
using GLProcResolver = std::function< void *(const char *)>
 
- Static Public Member Functions inherited from flutter::GPUSurfaceGLDelegate
static sk_sp< const GrGLInterface > GetDefaultPlatformGLInterface ()
 

Detailed Description

Definition at line 22 of file embedder_surface_gl_impeller.h.

Constructor & Destructor Documentation

◆ EmbedderSurfaceGLImpeller()

flutter::EmbedderSurfaceGLImpeller::EmbedderSurfaceGLImpeller ( EmbedderSurfaceGLSkia::GLDispatchTable  gl_dispatch_table,
bool  fbo_reset_after_present,
std::shared_ptr< EmbedderExternalViewEmbedder external_view_embedder 
)

Definition at line 45 of file embedder_surface_gl_impeller.cc.

49 : gl_dispatch_table_(std::move(gl_dispatch_table)),
50 fbo_reset_after_present_(fbo_reset_after_present),
51 external_view_embedder_(std::move(external_view_embedder)),
52 worker_(std::make_shared<ReactorWorker>()) {
53 // Make sure all required members of the dispatch table are checked.
54 if (!gl_dispatch_table_.gl_make_current_callback ||
55 !gl_dispatch_table_.gl_clear_current_callback ||
56 !gl_dispatch_table_.gl_present_callback ||
57 !gl_dispatch_table_.gl_fbo_callback ||
58 !gl_dispatch_table_.gl_populate_existing_damage ||
59 !gl_dispatch_table_.gl_proc_resolver) {
60 return;
61 }
62 // Certain GL backends need to made current before any GL
63 // state can be accessed.
64 gl_dispatch_table_.gl_make_current_callback();
65
66 std::vector<std::shared_ptr<fml::Mapping>> shader_mappings = {
67 std::make_shared<fml::NonOwnedMapping>(
68 impeller_entity_shaders_gles_data,
69 impeller_entity_shaders_gles_length),
70 std::make_shared<fml::NonOwnedMapping>(
71 impeller_modern_shaders_gles_data,
72 impeller_modern_shaders_gles_length),
73 std::make_shared<fml::NonOwnedMapping>(
74 impeller_framebuffer_blend_shaders_gles_data,
75 impeller_framebuffer_blend_shaders_gles_length),
76 };
77 auto gl = std::make_unique<impeller::ProcTableGLES>(
78 gl_dispatch_table_.gl_proc_resolver);
79 if (!gl->IsValid()) {
80 return;
81 }
82
83 impeller_context_ = impeller::ContextGLES::Create(
84 impeller::Flags{}, std::move(gl), shader_mappings,
85 /*enable_gpu_tracing=*/false);
86
87 if (!impeller_context_) {
88 FML_LOG(ERROR) << "Could not create Impeller context.";
89 return;
90 }
91
92 auto worker_id = impeller_context_->AddReactorWorker(worker_);
93 if (!worker_id.has_value()) {
94 FML_LOG(ERROR) << "Could not add reactor worker.";
95 return;
96 }
97
98 gl_dispatch_table_.gl_clear_current_callback();
99 FML_LOG(IMPORTANT) << "Using the Impeller rendering backend (OpenGL).";
100 valid_ = true;
101}
static std::shared_ptr< ContextGLES > Create(const Flags &flags, std::unique_ptr< ProcTableGLES > gl, const std::vector< std::shared_ptr< fml::Mapping > > &shader_libraries, bool enable_gpu_tracing)
#define FML_LOG(severity)
Definition logging.h:101
std::function< GLFBOInfo(intptr_t)> gl_populate_existing_damage
std::function< intptr_t(GLFrameInfo)> gl_fbo_callback
std::function< bool(GLPresentInfo)> gl_present_callback
std::function< void *(const char *)> gl_proc_resolver

References impeller::ContextGLES::Create(), FML_LOG, flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_clear_current_callback, flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_fbo_callback, flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_make_current_callback, flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_populate_existing_damage, flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_present_callback, and flutter::EmbedderSurfaceGLSkia::GLDispatchTable::gl_proc_resolver.

◆ ~EmbedderSurfaceGLImpeller()

flutter::EmbedderSurfaceGLImpeller::~EmbedderSurfaceGLImpeller ( )
overridedefault

The documentation for this class was generated from the following files: