Vulkan Surface
Being platform agnostic, Vulkan interfaces with the WSI via the VK_KHR_surface
extension. A Surface enables displaying images on the window through the presentation engine.
Add another helper function in window.hpp/cpp
:
auto glfw::create_surface(GLFWwindow* window, vk::Instance const instance)
-> vk::UniqueSurfaceKHR {
VkSurfaceKHR ret{};
auto const result =
glfwCreateWindowSurface(instance, window, nullptr, &ret);
if (result != VK_SUCCESS || ret == VkSurfaceKHR{}) {
throw std::runtime_error{"Failed to create Vulkan Surface"};
}
return vk::UniqueSurfaceKHR{ret, instance};
}
Add a vk::UniqueSurfaceKHR
member to App
after m_instance
, and create the surface:
void App::create_surface() {
m_surface = glfw::create_surface(m_window.get(), *m_instance);
}