summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2025-01-09 20:14:33 +0100
committerMiguel <m.i@gmx.at>2025-01-09 20:14:33 +0100
commit0a4ed7140e65d83f3f8a0aca7abebbe8dffa360e (patch)
tree4c49ad148469c96251558951a6600cfcdc9a5cc0 /main.cpp
parent5a2cba2a816fa36081e02d6932ed875764a5e3d4 (diff)
more
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp37
1 files changed, 12 insertions, 25 deletions
diff --git a/main.cpp b/main.cpp
index e7ae44a..022243a 100644
--- a/main.cpp
+++ b/main.cpp
@@ -78,8 +78,8 @@ private:
bool quit=false;
GLFWwindow* window;
VkInstance instance;
-
VkDebugUtilsMessengerEXT debugMessenger;
+
VkSurfaceKHR surface;
VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
@@ -133,6 +133,7 @@ private:
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
createInfo.pfnUserCallback = debugCallback;
+ createInfo.pUserData = nullptr; // Optional
}
static VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(
@@ -140,8 +141,9 @@ private:
VkDebugUtilsMessageTypeFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
void* pUserData) {
-
- std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
+ //if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
+ std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
+ //}
return VK_FALSE;
}
@@ -736,14 +738,15 @@ private:
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;
- VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{};
-
auto extensions = getRequiredExtensions();
if (enableValidationLayers && !checkValidationLayerSupport()) {
throw std::runtime_error("validation layers requested, but not available!");
}
+ VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo{};
+ populateDebugMessengerCreateInfo(debugCreateInfo);
+
VkInstanceCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;
@@ -753,8 +756,7 @@ private:
if (enableValidationLayers) {
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data();
- populateDebugMessengerCreateInfo(debugCreateInfo);
- createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
+ createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo; // for debugging of: vkCreateInstance & vkDestroyInstance
} else {
createInfo.enabledLayerCount = 0;
createInfo.pNext = nullptr;
@@ -765,35 +767,20 @@ private:
}
// instance validation layers apply to all Vulkan calls (enble on device level for compat)
- bool checkValidationLayerSupport() {
+ const bool checkValidationLayerSupport() {
uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
std::vector<VkLayerProperties> availableLayers(layerCount);
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());
-
- std::set<std::string> requiredLayers(validationLayers.begin(), validationLayers.end());
-
for (const char* layerName : validationLayers) {
bool layerFound = false;
-
for (const auto& layerProperties : availableLayers) {
std::cout << "LAYER: " << layerProperties.layerName << std::endl;
if (strcmp(layerName, layerProperties.layerName) == 0) layerFound=true;
}
-
- if (!layerFound) {
- return false;
- }
+ if (!layerFound) return false;
}
return true;
-/*
- for (const auto& extension : availableExtensions) {
- // std::cout << "Available Device Extension: " << extension.extensionName << std::endl;
- requiredExtensions.erase(extension.extensionName);
- }
-
- return requiredExtensions.empty();
- */
}
std::vector<const char*> getRequiredExtensions() {
@@ -959,11 +946,11 @@ private:
}
vkDestroySwapchainKHR(device, swapChain, nullptr);
vkDestroyDevice(device, nullptr);
+
if (enableValidationLayers) {
DestroyDebugUtilsMessengerEXT(instance, debugMessenger, nullptr);
}
vkDestroySurfaceKHR(instance, surface, nullptr);
-
vkDestroyInstance(instance, nullptr);
glfwDestroyWindow(window);
glfwTerminate();