mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
[Impeller] Context VK can create vulkan surface from Android Native Window (flutter/engine#37214)
This commit is contained in:
parent
b85721b43d
commit
f2ab65aa2d
@ -527,6 +527,28 @@ std::unique_ptr<Surface> ContextVK::AcquireSurface(size_t current_frame) {
|
||||
return surface_producer_->AcquireSurface(current_frame);
|
||||
}
|
||||
|
||||
#ifdef FML_OS_ANDROID
|
||||
|
||||
vk::UniqueSurfaceKHR ContextVK::CreateAndroidSurface(
|
||||
ANativeWindow* window) const {
|
||||
if (!instance_) {
|
||||
return vk::UniqueSurfaceKHR{VK_NULL_HANDLE};
|
||||
}
|
||||
|
||||
auto create_info = vk::AndroidSurfaceCreateInfoKHR().setWindow(window);
|
||||
auto surface_res = instance_->createAndroidSurfaceKHRUnique(create_info);
|
||||
|
||||
if (surface_res.result != vk::Result::eSuccess) {
|
||||
VALIDATION_LOG << "Could not create Android surface, error: "
|
||||
<< vk::to_string(surface_res.result);
|
||||
return vk::UniqueSurfaceKHR{VK_NULL_HANDLE};
|
||||
}
|
||||
|
||||
return std::move(surface_res.value);
|
||||
}
|
||||
|
||||
#endif // FML_OS_ANDROID
|
||||
|
||||
void ContextVK::SetupSwapchain(vk::UniqueSurfaceKHR surface) {
|
||||
surface_ = std::move(surface);
|
||||
auto present_queue_out = PickPresentQueue(physical_device_, *surface_);
|
||||
|
||||
@ -66,6 +66,10 @@ class ContextVK final : public Context, public BackendCast<ContextVK, Context> {
|
||||
|
||||
std::shared_ptr<DescriptorPoolVK> GetDescriptorPool() const;
|
||||
|
||||
#ifdef FML_OS_ANDROID
|
||||
vk::UniqueSurfaceKHR CreateAndroidSurface(ANativeWindow* window) const;
|
||||
#endif // FML_OS_ANDROID
|
||||
|
||||
private:
|
||||
std::shared_ptr<fml::ConcurrentTaskRunner> worker_task_runner_;
|
||||
vk::UniqueInstance instance_;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user