Skip to content

Commit 231d346

Browse files
Return result of setting OpenGL contexts back to Flutter (flutter#173757)
Also check when using them internally that they have worked.
1 parent a8ae5e0 commit 231d346

File tree

4 files changed

+39
-21
lines changed

4 files changed

+39
-21
lines changed

engine/src/flutter/shell/platform/linux/fl_compositor_opengl.cc

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,12 @@ static gchar* get_program_log(GLuint program) {
113113
}
114114

115115
static void setup_shader(FlCompositorOpenGL* self) {
116-
fl_opengl_manager_make_current(self->opengl_manager);
116+
if (!fl_opengl_manager_make_current(self->opengl_manager)) {
117+
g_warning(
118+
"Failed to setup compositor shaders, unable to make OpenGL context "
119+
"current");
120+
return;
121+
}
117122

118123
GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);
119124
glShaderSource(vertex_shader, 1, &vertex_shader_src, nullptr);
@@ -167,7 +172,12 @@ static void setup_shader(FlCompositorOpenGL* self) {
167172
}
168173

169174
static void cleanup_shader(FlCompositorOpenGL* self) {
170-
fl_opengl_manager_make_current(self->opengl_manager);
175+
if (!fl_opengl_manager_make_current(self->opengl_manager)) {
176+
g_warning(
177+
"Failed to cleanup compositor shaders, unable to make OpenGL context "
178+
"current");
179+
return;
180+
}
171181

172182
if (self->program != 0) {
173183
glDeleteProgram(self->program);

engine/src/flutter/shell/platform/linux/fl_engine.cc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,9 @@ static bool create_opengl_backing_store(
251251
FlEngine* self,
252252
const FlutterBackingStoreConfig* config,
253253
FlutterBackingStore* backing_store_out) {
254-
fl_opengl_manager_make_current(self->opengl_manager);
254+
if (!fl_opengl_manager_make_current(self->opengl_manager)) {
255+
return false;
256+
}
255257

256258
GLint sized_format = GL_RGBA8;
257259
GLint general_format = GL_RGBA;
@@ -285,7 +287,9 @@ static bool create_opengl_backing_store(
285287
static bool collect_opengl_backing_store(
286288
FlEngine* self,
287289
const FlutterBackingStore* backing_store) {
288-
fl_opengl_manager_make_current(self->opengl_manager);
290+
if (!fl_opengl_manager_make_current(self->opengl_manager)) {
291+
return false;
292+
}
289293

290294
// OpenGL context is required when destroying #FlFramebuffer.
291295
g_object_unref(backing_store->open_gl.framebuffer.user_data);
@@ -381,14 +385,12 @@ static void* fl_engine_gl_proc_resolver(void* user_data, const char* name) {
381385

382386
static bool fl_engine_gl_make_current(void* user_data) {
383387
FlEngine* self = static_cast<FlEngine*>(user_data);
384-
fl_opengl_manager_make_current(self->opengl_manager);
385-
return true;
388+
return fl_opengl_manager_make_current(self->opengl_manager);
386389
}
387390

388391
static bool fl_engine_gl_clear_current(void* user_data) {
389392
FlEngine* self = static_cast<FlEngine*>(user_data);
390-
fl_opengl_manager_clear_current(self->opengl_manager);
391-
return true;
393+
return fl_opengl_manager_clear_current(self->opengl_manager);
392394
}
393395

394396
static uint32_t fl_engine_gl_get_fbo(void* user_data) {
@@ -398,8 +400,7 @@ static uint32_t fl_engine_gl_get_fbo(void* user_data) {
398400

399401
static bool fl_engine_gl_make_resource_current(void* user_data) {
400402
FlEngine* self = static_cast<FlEngine*>(user_data);
401-
fl_opengl_manager_make_resource_current(self->opengl_manager);
402-
return true;
403+
return fl_opengl_manager_make_resource_current(self->opengl_manager);
403404
}
404405

405406
// Called by the engine to retrieve an external texture.

engine/src/flutter/shell/platform/linux/fl_opengl_manager.cc

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,16 +73,17 @@ FlOpenGLManager* fl_opengl_manager_new() {
7373
return self;
7474
}
7575

76-
void fl_opengl_manager_make_current(FlOpenGLManager* self) {
77-
eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
78-
self->render_context);
76+
gboolean fl_opengl_manager_make_current(FlOpenGLManager* self) {
77+
return eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
78+
self->render_context) == EGL_TRUE;
7979
}
8080

81-
void fl_opengl_manager_make_resource_current(FlOpenGLManager* self) {
82-
eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
83-
self->resource_context);
81+
gboolean fl_opengl_manager_make_resource_current(FlOpenGLManager* self) {
82+
return eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
83+
self->resource_context) == EGL_TRUE;
8484
}
8585

86-
void fl_opengl_manager_clear_current(FlOpenGLManager* self) {
87-
eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
86+
gboolean fl_opengl_manager_clear_current(FlOpenGLManager* self) {
87+
return eglMakeCurrent(self->display, EGL_NO_SURFACE, EGL_NO_SURFACE,
88+
EGL_NO_CONTEXT) == EGL_TRUE;
8889
}

engine/src/flutter/shell/platform/linux/fl_opengl_manager.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,24 +29,30 @@ FlOpenGLManager* fl_opengl_manager_new();
2929
* @manager: an #FlOpenGLManager.
3030
*
3131
* Makes the rendering context current.
32+
*
33+
* Returns: %TRUE if the context made current.
3234
*/
33-
void fl_opengl_manager_make_current(FlOpenGLManager* manager);
35+
gboolean fl_opengl_manager_make_current(FlOpenGLManager* manager);
3436

3537
/**
3638
* fl_opengl_manager_make_resource_current:
3739
* @manager: an #FlOpenGLManager.
3840
*
3941
* Makes the resource rendering context current.
42+
*
43+
* Returns: %TRUE if the context made current.
4044
*/
41-
void fl_opengl_manager_make_resource_current(FlOpenGLManager* manager);
45+
gboolean fl_opengl_manager_make_resource_current(FlOpenGLManager* manager);
4246

4347
/**
4448
* fl_opengl_manager_clear_current:
4549
* @manager: an #FlOpenGLManager.
4650
*
4751
* Clears the current rendering context.
52+
*
53+
* Returns: %TRUE if the context cleared.
4854
*/
49-
void fl_opengl_manager_clear_current(FlOpenGLManager* manager);
55+
gboolean fl_opengl_manager_clear_current(FlOpenGLManager* manager);
5056

5157
G_END_DECLS
5258

0 commit comments

Comments
 (0)