45 using CommandPoolKey = std::pair<std::thread::id, VkQueueFlagBits>;
49 std::vector<VkSemaphore> present_completes;
50 std::vector<VkSemaphore> render_completes;
51 std::vector<VkFence> flight_fences;
52 std::vector<VkFence> image_fences;
53 std::size_t current_frame = 0;
54 bool framebuffer_resized =
false;
56 std::vector<std::unique_ptr<CommandBuffer>> command_buffers;
63 Graphics::FrameOutcome Update();
64 GraphicsFrameRuntimeAccess::PrepareFrameOutcome PrepareFrame();
65 GraphicsFrameRuntimeAccess::RenderFrameOutcome RenderPreparedFrame();
66 void WaitIdle()
const;
67 void CaptureScreenshot(
const std::filesystem::path& filename, std::size_t
id)
const;
69 void SetRenderer(std::unique_ptr<Renderer>&& renderer);
70 const Descriptor* GetAttachment(
const std::string& name)
const;
71 const ImageDepth* GetDepthAttachment(std::string_view name)
const;
72 std::optional<RenderTargetView> GetRenderTarget(std::string_view name)
const;
73 void SetFramebufferResized(std::size_t
id);
75 std::shared_ptr<CommandPool> GetCommandPool(VkQueueFlagBits queue_type = VK_QUEUE_GRAPHICS_BIT,
76 const std::thread::id& thread_id = std::this_thread::get_id())
const;
80 const VkPipelineCache& GetPipelineCache() const noexcept;
81 const
Surface* GetSurface(std::
size_t id) const noexcept;
82 const Swapchain* GetSwapchain(std::
size_t id) const noexcept;
83 bool HasSwapchain(std::
size_t id) const noexcept;
84 bool HasPreparedFrame() const noexcept;
85 uint32_t GetPreparedImageIndex(std::
size_t id) const;
86 const
Instance* GetInstance() const noexcept;
94 std::map<std::
string, const Descriptor*> attachments;
95 std::map<std::
string, std::unique_ptr<
RenderTarget2D>> render_targets;
97 std::vector<std::unique_ptr<Swapchain>> swapchains;
98 bool prepared_frame_ready = false;
99 mutable std::map<CommandPoolKey, std::shared_ptr<CommandPool>> command_pools;
100 mutable std::mutex command_pools_mutex;
106 VkPipelineCache pipeline_cache = VK_NULL_HANDLE;
107 std::vector<std::unique_ptr<
Surface>> surfaces;
110 void CreatePipelineCache();
111 void ResetRenderStages();
112 void RebuildRenderStages(
bool recreate_swapchain);
113 void RecreateSwapchain();
114 void RecreateCommandBuffers(std::
size_t id);
115 void RebuildRenderTargets();
116 void RecreateAttachmentsMap();