39 static std::string StringifyResultVk(VkResult result);
40 static void CheckVk(VkResult result);
43 inline static const T* SafeVkPtr(
const std::vector<T>& vec)
45 return vec.empty() ? nullptr : vec.data();
48 template <
typename T, std::
size_t N>
49 inline static const T* SafeVkPtr(
const std::array<T, N>& arr)
51 return N == 0 ? nullptr : arr.data();
60 const std::shared_ptr<CommandPool>&
61 GetCommandPool(
const std::thread::id& threadId = std::this_thread::get_id());
69 return m_Renderer.get();
78 this->m_Renderer = std::move(renderer);
81 const RenderStage* GetRenderStage(uint32_t index)
const;
83 const Descriptor* GetAttachment(
const std::string& name)
const;
87 return m_PhysicalDevice.get();
89 const LogicalDevice* GetLogicalDevice()
const
91 return m_LogicalDevice.get();
93 const VkPipelineCache& GetPipelineCache()
const
95 return m_PipelineCache;
98 const Surface* GetSurface(std::size_t
id)
const
100 return m_Surfaces[id].get();
102 const Swapchain* GetSwapchain(std::size_t
id)
const
104 return m_Swapchains[id].get();
106 void SetFramebufferResized(std::size_t
id)
108 m_PerSurfaceBuffers[id]->FramebufferResized =
true;
111 const Instance* GetInstance()
const
113 return m_Instance.get();
117 void CreatePipelineCache();
118 void ResetRenderStages();
119 void RecreateSwapchain();
120 void RecreateCommandBuffers(std::size_t
id);
121 void RecreatePass(std::size_t
id, RenderStage& renderStage);
122 void RecreateAttachmentsMap();
123 bool StartRenderpass(std::size_t
id, RenderStage& renderStage);
124 void EndRenderpass(std::size_t
id, RenderStage& renderStage);
127 std::unique_ptr<Renderer> m_Renderer;
128 std::map<std::string, const Descriptor*> m_Attachments;
129 std::vector<std::unique_ptr<Swapchain>> m_Swapchains;
131 std::map<std::thread::id, std::shared_ptr<CommandPool>> m_CommandPools;
133 Elapsed m_ElapsedPurge;
135 struct PerSurfaceBuffers
137 std::vector<VkSemaphore> PresentCompletes;
138 std::vector<VkSemaphore> RenderCompletes;
139 std::vector<VkFence> FlightFences;
140 std::size_t CurrentFrame = 0;
141 bool FramebufferResized =
false;
143 std::vector<std::unique_ptr<CommandBuffer>> CommandBuffers;
145 std::vector<std::unique_ptr<PerSurfaceBuffers>> m_PerSurfaceBuffers;
147 std::unique_ptr<Instance> m_Instance;
148 std::unique_ptr<PhysicalDevice> m_PhysicalDevice;
149 std::unique_ptr<LogicalDevice> m_LogicalDevice;
150 VkPipelineCache m_PipelineCache = VK_NULL_HANDLE;
151 std::vector<std::unique_ptr<Surface>> m_Surfaces;
Module that manages the Vulkan m_Instance, Surface, Window and the renderpass structure.
Definition Graphics.hpp:32