@@ -51,16 +51,9 @@ std::unique_ptr<AndroidSurface> AndroidSurfaceFactoryImpl::CreateSurface() {
51
51
}
52
52
case AndroidRenderingAPI::kVulkan :
53
53
FML_DCHECK (enable_impeller_);
54
- // TODO(kaushikiska@): Enable this after wiring a preference for Vulkan
55
- // backend.
56
- #if false
57
- return std::make_unique<AndroidSurfaceVulkanImpeller>(
54
+ return std::make_unique<AndroidSurfaceVulkanImpeller>(
58
55
std::static_pointer_cast<AndroidContextVulkanImpeller>(
59
56
android_context_));
60
- #else
61
- return std::make_unique<AndroidSurfaceGLImpeller>(
62
- std::static_pointer_cast<AndroidContextGLImpeller>(android_context_));
63
- #endif
64
57
default :
65
58
FML_DCHECK (false );
66
59
return nullptr ;
@@ -73,19 +66,36 @@ static std::shared_ptr<flutter::AndroidContext> CreateAndroidContext(
73
66
const std::shared_ptr<fml::ConcurrentTaskRunner>& worker_task_runner,
74
67
uint8_t msaa_samples,
75
68
bool enable_impeller,
69
+ const std::optional<std::string>& impeller_backend,
76
70
bool enable_vulkan_validation) {
77
71
if (use_software_rendering) {
78
72
return std::make_shared<AndroidContext>(AndroidRenderingAPI::kSoftware );
79
73
}
80
74
if (enable_impeller) {
81
- // TODO(kaushikiska@): Enable this after wiring a preference for Vulkan
82
- // backend.
83
- #if false
84
- return std::make_unique<AndroidContextVulkanImpeller>(enable_vulkan_validation, std::move (worker_task_runner));
85
- #else
86
- return std::make_unique<AndroidContextGLImpeller>(
87
- std::make_unique<impeller::egl::Display>());
88
- #endif
75
+ // TODO(gaaclarke): We need to devise a more complete heuristic about what
76
+ // backend to use by default.
77
+ // Default value is OpenGLES.
78
+ AndroidRenderingAPI backend = AndroidRenderingAPI::kOpenGLES ;
79
+ if (impeller_backend.has_value ()) {
80
+ if (impeller_backend.value () == " opengles" ) {
81
+ backend = AndroidRenderingAPI::kOpenGLES ;
82
+ } else if (impeller_backend.value () == " vulkan" ) {
83
+ backend = AndroidRenderingAPI::kVulkan ;
84
+ } else {
85
+ FML_CHECK (impeller_backend.value () == " vulkan" ||
86
+ impeller_backend.value () == " opengles" );
87
+ }
88
+ }
89
+ switch (backend) {
90
+ case AndroidRenderingAPI::kOpenGLES :
91
+ return std::make_unique<AndroidContextGLImpeller>(
92
+ std::make_unique<impeller::egl::Display>());
93
+ case AndroidRenderingAPI::kVulkan :
94
+ return std::make_unique<AndroidContextVulkanImpeller>(
95
+ enable_vulkan_validation, worker_task_runner);
96
+ default :
97
+ FML_UNREACHABLE ();
98
+ }
89
99
}
90
100
return std::make_unique<AndroidContextGLSkia>(
91
101
AndroidRenderingAPI::kOpenGLES , //
@@ -112,6 +122,7 @@ PlatformViewAndroid::PlatformViewAndroid(
112
122
worker_task_runner,
113
123
msaa_samples,
114
124
delegate.OnPlatformViewGetSettings().enable_impeller,
125
+ delegate.OnPlatformViewGetSettings().impeller_backend,
115
126
delegate.OnPlatformViewGetSettings().enable_vulkan_validation)) {}
116
127
117
128
PlatformViewAndroid::PlatformViewAndroid (
0 commit comments