10 #include "flutter/fml/macros.h"
12 #include "vulkan/vulkan_enums.hpp"
17 class SwapchainImageVK;
19 struct FrameSynchronizer;
30 :
public std::enable_shared_from_this<SwapchainImplVK> {
32 static std::shared_ptr<SwapchainImplVK>
Create(
33 const std::shared_ptr<Context>& context,
34 vk::UniqueSurfaceKHR surface,
35 vk::SwapchainKHR old_swapchain = VK_NULL_HANDLE,
36 vk::SurfaceTransformFlagBitsKHR last_transform =
37 vk::SurfaceTransformFlagBitsKHR::eIdentity);
64 std::weak_ptr<Context> context_;
65 vk::UniqueSurfaceKHR surface_;
66 vk::Queue present_queue_ = {};
67 vk::Format surface_format_ = vk::Format::eUndefined;
68 vk::UniqueSwapchainKHR swapchain_;
69 std::vector<std::shared_ptr<SwapchainImageVK>> images_;
70 std::vector<std::unique_ptr<FrameSynchronizer>> synchronizers_;
71 size_t current_frame_ = 0u;
72 bool is_valid_ =
false;
73 size_t current_transform_poll_count_ = 0u;
74 vk::SurfaceTransformFlagBitsKHR transform_if_changed_discard_swapchain_;
76 SwapchainImplVK(
const std::shared_ptr<Context>& context,
77 vk::UniqueSurfaceKHR surface,
78 vk::SwapchainKHR old_swapchain,
79 vk::SurfaceTransformFlagBitsKHR last_transform);
81 bool Present(
const std::shared_ptr<SwapchainImageVK>& image, uint32_t index);
83 void WaitIdle()
const;
85 FML_DISALLOW_COPY_AND_ASSIGN(SwapchainImplVK);