Added some callback info

This commit is contained in:
Warwick New 2024-10-12 21:47:42 +01:00
parent 46dc696668
commit b8d5db9aa2

View file

@ -14,6 +14,19 @@ const bool enableValidationLayers = false;
const bool enableValidationLayers = true; const bool enableValidationLayers = true;
#endif #endif
static VKAPI_ATTR VkBool32 VKAPI_CALL
debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VkDebugUtilsMessageTypeFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData,
void *pUserData) {
// TODO: Put all messages into a log file
if (messageSeverity >= VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) {
fprintf(stderr, "validation layer: %s\n", pCallbackData->pMessage);
}
return VK_FALSE;
}
const char *validationLayers[] = {"VK_LAYER_KHRONOS_validation"}; const char *validationLayers[] = {"VK_LAYER_KHRONOS_validation"};
size_t validationLayerCount = size_t validationLayerCount =
sizeof(validationLayers) / sizeof(validationLayers[0]); sizeof(validationLayers) / sizeof(validationLayers[0]);
@ -21,6 +34,7 @@ size_t validationLayerCount =
typedef struct Application { typedef struct Application {
GLFWwindow *window; GLFWwindow *window;
VkInstance instance; VkInstance instance;
VkDebugUtilsMessengerEXT debugMessenger;
} Application; } Application;
bool checkValidationLayerSupport() { bool checkValidationLayerSupport() {
@ -65,7 +79,7 @@ bool verifyGlfwExtensionSupport(uint32_t extensionCount,
void createInstance(Application *app) { void createInstance(Application *app) {
if (enableValidationLayers && !checkValidationLayerSupport()) { if (enableValidationLayers && !checkValidationLayerSupport()) {
fprintf(stderr, "Validation layers requested, but not available!"); fprintf(stderr, "Validation layers requested, but not available!\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
@ -123,7 +137,23 @@ void initWindow(Application *app) {
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE); glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
app->window = glfwCreateWindow(800, 600, "Vulkan", NULL, NULL); app->window = glfwCreateWindow(800, 600, "Vulkan", NULL, NULL);
} }
void initVulkan(Application *app) { createInstance(app); } void setupDebugMessenger(Application *app) {
VkDebugUtilsMessengerCreateInfoEXT createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
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 = NULL; // Optional
}
void initVulkan(Application *app) {
setupDebugMessenger(app);
createInstance(app);
}
void mainLoop(Application *app) { void mainLoop(Application *app) {
while (!glfwWindowShouldClose(app->window)) { while (!glfwWindowShouldClose(app->window)) {
glfwPollEvents(); glfwPollEvents();