From 1e7ddc408ab720ef13d20b7060faa5030245ffb9 Mon Sep 17 00:00:00 2001 From: Abhishek Amit Date: Thu, 25 Jan 2018 17:30:23 -0800 Subject: [PATCH] Allow embedder clients to provide a resource context (flutter/engine#4588) * Allow embedder clients to provide a resource context. Closes flutter/flutter#14263. --- engine/src/flutter/shell/platform/embedder/embedder.cc | 10 ++++++++++ engine/src/flutter/shell/platform/embedder/embedder.h | 1 + .../shell/platform/embedder/platform_view_embedder.cc | 10 ++++++++-- .../shell/platform/embedder/platform_view_embedder.h | 3 ++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/engine/src/flutter/shell/platform/embedder/embedder.cc b/engine/src/flutter/shell/platform/embedder/embedder.cc index 38819f1760..2ac87f7533 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder.cc +++ b/engine/src/flutter/shell/platform/embedder/embedder.cc @@ -125,6 +125,15 @@ FlutterResult FlutterEngineRun(size_t version, }; } + const FlutterOpenGLRendererConfig* open_gl_config = &config->open_gl; + std::function make_resource_current_callback = nullptr; + if (SAFE_ACCESS(open_gl_config, make_resource_current, nullptr) != nullptr) { + make_resource_current_callback = + [ ptr = config->open_gl.make_resource_current, user_data ]() { + return ptr(user_data); + }; + } + std::string icu_data_path; if (SAFE_ACCESS(args, icu_data_path, nullptr) != nullptr) { icu_data_path = SAFE_ACCESS(args, icu_data_path, nullptr); @@ -154,6 +163,7 @@ FlutterResult FlutterEngineRun(size_t version, .gl_present_callback = present, .gl_fbo_callback = fbo_callback, .platform_message_response_callback = platform_message_response_callback, + .gl_make_resource_current_callback = make_resource_current_callback, }; auto platform_view = std::make_shared(table); diff --git a/engine/src/flutter/shell/platform/embedder/embedder.h b/engine/src/flutter/shell/platform/embedder/embedder.h index 24f5a10b39..a4c6d7fa39 100644 --- a/engine/src/flutter/shell/platform/embedder/embedder.h +++ b/engine/src/flutter/shell/platform/embedder/embedder.h @@ -41,6 +41,7 @@ typedef struct { BoolCallback clear_current; BoolCallback present; UIntCallback fbo_callback; + BoolCallback make_resource_current; } FlutterOpenGLRendererConfig; typedef struct { diff --git a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc index 37e6c03324..46e0390770 100644 --- a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc +++ b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.cc @@ -34,11 +34,17 @@ intptr_t PlatformViewEmbedder::GLContextFBO() const { void PlatformViewEmbedder::Attach() { CreateEngine(); NotifyCreated(std::make_unique(this)); + + if (dispatch_table_.gl_make_resource_current_callback != nullptr) { + SetupResourceContextOnIOThread(); + } } bool PlatformViewEmbedder::ResourceContextMakeCurrent() { - // Unsupported. - return false; + if (dispatch_table_.gl_make_resource_current_callback == nullptr) { + return false; + } + return dispatch_table_.gl_make_resource_current_callback(); } void PlatformViewEmbedder::RunFromSource(const std::string& assets_directory, diff --git a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h index 31779e4e97..c287fc5ac8 100644 --- a/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h +++ b/engine/src/flutter/shell/platform/embedder/platform_view_embedder.h @@ -22,7 +22,8 @@ class PlatformViewEmbedder : public PlatformView, public GPUSurfaceGLDelegate { std::function gl_present_callback; // required std::function gl_fbo_callback; // required PlatformMessageResponseCallback - platform_message_response_callback; // optional + platform_message_response_callback; // optional + std::function gl_make_resource_current_callback; // optional }; PlatformViewEmbedder(DispatchTable dispatch_table);