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]] extent2i size() const noexcept override;
96 void update(extent2i new_size) noexcept override;
98 [[nodiscard]]
draw_context render_start(aarectanglei redraw_rectangle) override;
99 void render_finish(
draw_context const& context) override;
105 void teardown() noexcept override;
106 void build(extent2i new_size) noexcept;
109 struct delegate_type {
111 vk::Semaphore semaphore;
118 extent2i _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);
140 void submit_command_buffer(vk::Semaphore delegate_semaphore);
142 bool read_surface_extent(extent2i minimum_size, extent2i 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, extent2i> get_image_count_and_size(
std::
size_t new_count, extent2i new_size);