From cedb80cb0325818ea12b4df0c6c10780c9e7d81f Mon Sep 17 00:00:00 2001 From: homeburger Date: Wed, 13 May 2026 19:24:55 -0500 Subject: [PATCH] fix that buffoonery --- src/Engine.cpp | 54 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/src/Engine.cpp b/src/Engine.cpp index e5b59ea..e43408d 100644 --- a/src/Engine.cpp +++ b/src/Engine.cpp @@ -45,25 +45,10 @@ bool Engine::createInstance() { .apiVersion = VK_API_VERSION_1_4 // this one is most important }; - // get necessary extensions that our windowing library requires + // get extensions that our windowing library requires uint32_t instanceExtensionsCount = 0; char const* const* instanceExtensions{ SDL_Vulkan_GetInstanceExtensions(&instanceExtensionsCount) }; - // get required validation layers as specified by our app - std::vector requiredValidationLayers; - if(enableValidationLayers) requiredValidationLayers.assign(validationLayers.begin(), validationLayers.end()); - - auto validationLayerProperties = context_.enumerateInstanceLayerProperties(); - auto unsupportedLayer = std::ranges::find_if(requiredValidationLayers, [&validationLayerProperties](const auto& requiredLayer) { - return std::ranges::none_of(validationLayerProperties, [requiredLayer](const auto& layerProperty) { - return strcmp(layerProperty.layerName, requiredLayer) == 0; - }); - }); // TODO: what black magic even is this - if(unsupportedLayer != requiredValidationLayers.end()) { - std::cout << "[" << __FUNCTION__ << ": " << __LINE__ << "] Required validation layer not supported: " << *unsupportedLayer << std::endl; - errorCount++; - } - // get all available extensions auto extensionProperties = context_.enumerateInstanceExtensionProperties(); @@ -73,12 +58,11 @@ bool Engine::createInstance() { std::cout << "\t" << extensionProperty.extensionName << std::endl; } + // check that all required extensions are available for(uint32_t i = 0; i < instanceExtensionsCount; i++) { // for each extension that we require bool found = false; for(const auto& extensionProperty : extensionProperties) { // see if it matches any extensions that are provided if(strcmp(extensionProperty.extensionName, instanceExtensions[i]) == 0) { - std::cout << "[" << __FUNCTION__ << ": " << __LINE__ << "] Required SDL3 extension not supported: " << instanceExtensions[i] << std::endl; - } else { found = true; break; } @@ -90,7 +74,39 @@ bool Engine::createInstance() { // in case you're curious //std::cout << "[" << __FUNCTION__ << ": " << __LINE__ << "] SDL3 extension located: " << instanceExtensions[i] << std::endl; } - } // if any weren't then we must exit + } + + // get required validation layers as specified by our app + std::vector requiredValidationLayers; + if(enableValidationLayers) requiredValidationLayers.assign(validationLayers.begin(), validationLayers.end()); + + // get available validation layers + auto validationLayerProperties = context_.enumerateInstanceLayerProperties(); + + // again print if we feel like it + std::cout << "Available Vulkan Validation Layers: " << std::endl; + for(const auto& validationLayer : validationLayerProperties) { + std::cout << "\t" << validationLayer.layerName << std::endl; + } + + // check that all required validation layers are avilable + for(int i = 0; i < requiredValidationLayers.size(); i++) { + bool found = false; + for(const auto& validationLayer : validationLayerProperties) { + if(strcmp(requiredValidationLayers[i], validationLayer.layerName) == 0) { + found = true; + break; + } + } + if(!found) { + errorCount++; + std::cout << "[" << __FUNCTION__ << ": " << __LINE__ << "] Required validation layer not supported: " << requiredValidationLayers[i] << std::endl; + } else { // in case you're curious + //std::cout << "[" << __FUNCTION__ << ": " << __LINE__ << "] VkValidation layer located: " << requiredValidationLayers[i] << std::endl; + } + } + + // if any we had errors then we must exit if(errorCount != 0) return false; vk::InstanceCreateInfo instanceCreateInfo {