95 {
96
97 constexpr vk::ApplicationInfo APP_INFO{
98 .pApplicationName = "Hello Triangle",
99 .applicationVersion = VK_MAKE_VERSION( 1, 0, 0 ),
100 .pEngineName = "No Engine",
101 .engineVersion = VK_MAKE_VERSION( 1, 0, 0 ),
102 .apiVersion = vk::ApiVersion13
103 };
104
105
106
107 std::vector<char const*> requiredLayers;
110 }
111
112
113 auto layerProperties =
_context.enumerateInstanceLayerProperties();
114 if (std::ranges::any_of(requiredLayers, [&layerProperties](auto const& requiredLayer) {
115 return std::ranges::none_of(layerProperties,
116 [requiredLayer](auto const& layerProperty)
117 { return strcmp(layerProperty.layerName, requiredLayer) == 0; });
118 }))
119 {
120 throw std::runtime_error("One or more required layers are not supported!");
121 }
122
123 for (auto layer: requiredLayers) {
124 std::cout << layer << std::endl;
125 }
126
127
128 uint32_t glfwExtensionCount = 0;
130
131 auto extensions =
_context.enumerateInstanceExtensionProperties();
132 std::cout << "available extensions:\n";
133
134 for (const auto& extension : extensions) {
135 std::cout << '\t' << extension.extensionName << '\n';
136 }
137
138
139 auto extensionProperties =
_context.enumerateInstanceExtensionProperties();
140 for (uint32_t i = 0; i < glfwExtensionCount; ++i)
141 {
142 if (std::ranges::none_of(extensionProperties,
143 [glfwExtension = glfwExtensions[i]](auto const& extensionProperty)
144 { return strcmp(extensionProperty.extensionName, glfwExtension) == 0; }))
145 {
146 throw std::runtime_error("Required GLFW extension not supported: " + std::string(glfwExtensions[i]));
147 }
148 }
149
150 vk::InstanceCreateInfo createInfo{
151 .pApplicationInfo = &APP_INFO,
152 .enabledLayerCount = static_cast<uint32_t>(requiredLayers.size()),
153 .ppEnabledLayerNames = requiredLayers.data(),
154 .enabledExtensionCount = glfwExtensionCount,
155 .ppEnabledExtensionNames = glfwExtensions,
156 };
157
159 }
vk::raii::Context _context
Definition main.cpp:48
vk::raii::Instance _instance
Definition main.cpp:49
GLFWAPI const char ** glfwGetRequiredInstanceExtensions(uint32_t *count)
Returns the Vulkan instance extensions required by GLFW.
const std::vector< char const * > validationLayers
Definition main.cpp:28
constexpr bool enableValidationLayers
Definition main.cpp:35