44 vk::SurfaceKHR intrinsic;
46 vk::SwapchainKHR swapchain;
48 static constexpr uint32_t defaultNumberOfSwapchainImages = 2;
50 uint32_t nrSwapchainImages;
51 vk::Extent2D swapchainImageExtent;
52 vk::SurfaceFormatKHR swapchainImageFormat;
56 static const vk::Format depthImageFormat = vk::Format::eD16Unorm;
57 VmaAllocation depthImageAllocation;
59 vk::ImageView depthImageView;
61 static const vk::Format colorImageFormat = vk::Format::eR16G16B16A16Sfloat;
67 vk::RenderPass renderPass;
69 vk::CommandBuffer commandBuffer;
71 vk::Semaphore imageAvailableSemaphore;
72 vk::Semaphore renderFinishedSemaphore;
73 vk::Fence renderFinishedFence;
94 [[nodiscard]] extent2 size() const noexcept override;
96 void update(extent2 new_size) noexcept override;
98 [[nodiscard]]
std::optional<gfx_draw_context> render_start(aarectangle redraw_rectangle) override;
99 void render_finish(gfx_draw_context const& context) override;
105 void teardown() noexcept override;
106 void build(extent2 new_size) noexcept;
109 struct delegate_type {
111 vk::Semaphore semaphore;
118 extent2 _render_area_granularity;
123 void teardown_for_swapchain_lost() noexcept;
124 void teardown_for_device_lost() noexcept;
125 void teardown_for_window_lost() noexcept;
127 std::optional<uint32_t> acquire_next_image_from_swapchain();
128 void present_image_to_queue(uint32_t frameBufferIndex, vk::Semaphore renderFinishedSemaphore);
134 void fill_command_buffer(
swapchain_image_info const& current_image, gfx_draw_context const& context, vk::Rect2D render_area);
140 void submit_command_buffer(vk::Semaphore delegate_semaphore);
142 bool read_surface_extent(extent2 minimum_size, extent2 maximum_size);
143 bool check_surface_extent();
145 void build_semaphores();
146 void teardown_semaphores();
148 void teardown_swapchain();
149 void build_command_buffers();
150 void teardown_command_buffers();
151 void build_render_passes();
152 void teardown_render_passes();
153 void build_frame_buffers();
154 void teardown_frame_buffers();
155 void build_pipelines();
156 void teardown_pipelines();
168 std::tuple<
std::
size_t, extent2> get_image_count_and_size(
std::
size_t new_count, extent2 new_size);