Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Private Member Functions | List of all members
flutter::EmbedderSurfaceGLImpeller Class Referencefinal

#include <embedder_surface_gl_impeller.h>

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

Public Member Functions

 EmbedderSurfaceGLImpeller (EmbedderSurfaceGL::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< SkIRect > &region)
 
virtual sk_sp< const GrGLInterfaceGetGLInterface () const
 
virtual bool AllowsDrawingWhenGpuDisabled () const
 

Private Member Functions

bool IsValid () const override
 
std::unique_ptr< SurfaceCreateGPUSurface () override
 
std::shared_ptr< impeller::ContextCreateImpellerContext () const override
 
std::unique_ptr< GLContextResultGLContextMakeCurrent () override
 
bool GLContextClearCurrent () override
 
bool GLContextPresent (const GLPresentInfo &present_info) override
 
GLFBOInfo GLContextFBO (GLFrameInfo frame_info) const override
 
bool GLContextFBOResetAfterPresent () const override
 
SkMatrix GLContextSurfaceTransformation () const override
 
GLProcResolver GetGLProcResolver () const override
 
SurfaceFrame::FramebufferInfo GLContextFramebufferInfo () const override
 
sk_sp< GrDirectContextCreateResourceContext () const override
 

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 GrGLInterfaceGetDefaultPlatformGLInterface ()
 

Detailed Description

Definition at line 22 of file embedder_surface_gl_impeller.h.

Constructor & Destructor Documentation

◆ EmbedderSurfaceGLImpeller()

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

Definition at line 48 of file embedder_surface_gl_impeller.cc.

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

◆ ~EmbedderSurfaceGLImpeller()

flutter::EmbedderSurfaceGLImpeller::~EmbedderSurfaceGLImpeller ( )
overridedefault

Member Function Documentation

◆ CreateGPUSurface()

std::unique_ptr< Surface > flutter::EmbedderSurfaceGLImpeller::CreateGPUSurface ( )
overrideprivatevirtual

Implements flutter::EmbedderSurface.

Definition at line 180 of file embedder_surface_gl_impeller.cc.

180 {
181 // Ensure that the GL context is current before creating the GPU surface.
182 // GPUSurfaceGLImpeller initialization will set up shader pipelines, and the
183 // current thread needs to be able to execute reactor operations.
185
186 return std::make_unique<GPUSurfaceGLImpeller>(
187 this, // GPU surface GL delegate
188 impeller_context_, // Impeller context
189 !external_view_embedder_ // render to surface
190 );
191}
std::unique_ptr< GLContextResult > GLContextMakeCurrent() override

◆ CreateImpellerContext()

std::shared_ptr< impeller::Context > flutter::EmbedderSurfaceGLImpeller::CreateImpellerContext ( ) const
overrideprivatevirtual

Reimplemented from flutter::EmbedderSurface.

Definition at line 195 of file embedder_surface_gl_impeller.cc.

195 {
196 return impeller_context_;
197}

◆ CreateResourceContext()

sk_sp< GrDirectContext > flutter::EmbedderSurfaceGLImpeller::CreateResourceContext ( ) const
overrideprivatevirtual

Reimplemented from flutter::EmbedderSurface.

Definition at line 200 of file embedder_surface_gl_impeller.cc.

201 {
202 if (gl_dispatch_table_.gl_make_resource_current_callback()) {
203 worker_->SetReactionsAllowedOnCurrentThread(true);
204 } else {
205 FML_DLOG(ERROR) << "Could not make the resource context current.";
206 worker_->SetReactionsAllowedOnCurrentThread(false);
207 }
208 return nullptr;
209}
#define FML_DLOG(severity)
Definition logging.h:102
std::function< bool(void)> gl_make_resource_current_callback

◆ GetGLProcResolver()

EmbedderSurfaceGL::GLProcResolver flutter::EmbedderSurfaceGLImpeller::GetGLProcResolver ( ) const
overrideprivatevirtual

Reimplemented from flutter::GPUSurfaceGLDelegate.

Definition at line 163 of file embedder_surface_gl_impeller.cc.

164 {
165 return gl_dispatch_table_.gl_proc_resolver;
166}

◆ GLContextClearCurrent()

bool flutter::EmbedderSurfaceGLImpeller::GLContextClearCurrent ( )
overrideprivatevirtual

Implements flutter::GPUSurfaceGLDelegate.

Definition at line 125 of file embedder_surface_gl_impeller.cc.

125 {
126 worker_->SetReactionsAllowedOnCurrentThread(false);
127 return gl_dispatch_table_.gl_clear_current_callback();
128}

◆ GLContextFBO()

GLFBOInfo flutter::EmbedderSurfaceGLImpeller::GLContextFBO ( GLFrameInfo  frame_info) const
overrideprivatevirtual

Implements flutter::GPUSurfaceGLDelegate.

Definition at line 138 of file embedder_surface_gl_impeller.cc.

139 {
140 // Get the FBO ID using the gl_fbo_callback and then get exiting damage by
141 // passing that ID to the gl_populate_existing_damage.
142 return gl_dispatch_table_.gl_populate_existing_damage(
143 gl_dispatch_table_.gl_fbo_callback(frame_info));
144}

◆ GLContextFBOResetAfterPresent()

bool flutter::EmbedderSurfaceGLImpeller::GLContextFBOResetAfterPresent ( ) const
overrideprivatevirtual

Reimplemented from flutter::GPUSurfaceGLDelegate.

Definition at line 147 of file embedder_surface_gl_impeller.cc.

147 {
148 return fbo_reset_after_present_;
149}

◆ GLContextFramebufferInfo()

SurfaceFrame::FramebufferInfo flutter::EmbedderSurfaceGLImpeller::GLContextFramebufferInfo ( ) const
overrideprivatevirtual

Reimplemented from flutter::GPUSurfaceGLDelegate.

Definition at line 170 of file embedder_surface_gl_impeller.cc.

170 {
171 // Enable partial repaint by default on the embedders.
172 auto info = SurfaceFrame::FramebufferInfo{};
173 info.supports_readback = true;
174 info.supports_partial_repaint =
175 gl_dispatch_table_.gl_populate_existing_damage != nullptr;
176 return info;
177}
static void info(const char *fmt,...) SK_PRINTF_LIKE(1
Definition DM.cpp:213

◆ GLContextMakeCurrent()

std::unique_ptr< GLContextResult > flutter::EmbedderSurfaceGLImpeller::GLContextMakeCurrent ( )
overrideprivatevirtual

Implements flutter::GPUSurfaceGLDelegate.

Definition at line 118 of file embedder_surface_gl_impeller.cc.

118 {
119 worker_->SetReactionsAllowedOnCurrentThread(true);
120 return std::make_unique<GLContextDefaultResult>(
121 gl_dispatch_table_.gl_make_current_callback());
122}

◆ GLContextPresent()

bool flutter::EmbedderSurfaceGLImpeller::GLContextPresent ( const GLPresentInfo present_info)
overrideprivatevirtual

Implements flutter::GPUSurfaceGLDelegate.

Definition at line 131 of file embedder_surface_gl_impeller.cc.

132 {
133 // Pass the present information to the embedder present callback.
134 return gl_dispatch_table_.gl_present_callback(present_info);
135}

◆ GLContextSurfaceTransformation()

SkMatrix flutter::EmbedderSurfaceGLImpeller::GLContextSurfaceTransformation ( ) const
overrideprivatevirtual

Reimplemented from flutter::GPUSurfaceGLDelegate.

Definition at line 152 of file embedder_surface_gl_impeller.cc.

152 {
153 auto callback = gl_dispatch_table_.gl_surface_transformation_callback;
154 if (!callback) {
156 matrix.setIdentity();
157 return matrix;
158 }
159 return callback();
160}
FlKeyEvent uint64_t FlKeyResponderAsyncCallback callback
unsigned useCenter Optional< SkMatrix > matrix
Definition SkRecords.h:258
std::function< SkMatrix(void)> gl_surface_transformation_callback

◆ IsValid()

bool flutter::EmbedderSurfaceGLImpeller::IsValid ( ) const
overrideprivatevirtual

Implements flutter::EmbedderSurface.

Definition at line 112 of file embedder_surface_gl_impeller.cc.

112 {
113 return valid_;
114}

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