diff --git a/CMakeLists.txt b/CMakeLists.txt index 9713e6c..3af2c69 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,6 +66,14 @@ elseif(MSVC) target_compile_options(${EXE_NAME} PRIVATE /W4) endif() +if(WIN32) + add_custom_command( + TARGET ${EXE_NAME} POST_BUILD + COMMAND "${CMAKE_COMMAND}" -E copy $ $ + VERBATIM + ) +endif() + # Linking target_link_libraries(${EXE_NAME} PRIVATE SDL3::SDL3) target_link_libraries(${EXE_NAME} PRIVATE Vulkan::Vulkan) diff --git a/include/vulkanapp.hh b/include/vulkanapp.hh index 0d3b6b9..4015ad6 100644 --- a/include/vulkanapp.hh +++ b/include/vulkanapp.hh @@ -7,7 +7,7 @@ #include #include -#include +#include #include @@ -125,6 +125,7 @@ private: VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector&); VkPresentModeKHR chooseSwapPresentMode(const std::vector&); VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR&); + // Validation layer stuff void setupDebugMessenger(); bool checkValidationLayerSupport(); diff --git a/src/main.cc b/src/main.cc index 1b8e8e3..4445c0e 100644 --- a/src/main.cc +++ b/src/main.cc @@ -7,8 +7,8 @@ #include -constexpr uint32_t winInitWidth = 512; -constexpr uint32_t winInitHeight = 512; +constexpr uint32_t winInitWidth = 1024; +constexpr uint32_t winInitHeight = 1024; struct AppContext { VulkanApp vkapp; @@ -28,7 +28,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char **argv) { return SDL_Fail(); try { - *appstate = new AppContext { .vkapp = VulkanApp(1024, 1024)}; + *appstate = new AppContext { .vkapp = VulkanApp(winInitWidth, winInitHeight)}; AppContext* app = static_cast(*appstate); app->vkapp.init(); } catch(const std::exception& except) { @@ -79,11 +79,10 @@ SDL_AppResult SDL_AppIterate(void *appstate) { void SDL_AppQuit(void *appstate, SDL_AppResult result) { AppContext* app = static_cast(appstate); - if(result == SDL_APP_FAILURE) { + if(result == SDL_APP_FAILURE) fputs("Program failure, shutting down\n", stderr); - } else { - puts("Program shutting down, no errors."); - } + else + puts("Program shutting down, no errors."); if(app) { app->vkapp.cleanup(); diff --git a/src/vulkanapp.cc b/src/vulkanapp.cc index 6494486..4919380 100644 --- a/src/vulkanapp.cc +++ b/src/vulkanapp.cc @@ -3,7 +3,6 @@ #include #include -#include #include #include #include @@ -305,9 +304,8 @@ void VulkanApp::drawFrame() { } void VulkanApp::init() { - // Initialize SDL2 - SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS); - //SDL_Vulkan_LoadLibrary(nullptr); + // Initialize SDL3 + SDL_Init(SDL_INIT_VIDEO); // Create the window mWin = SDL_CreateWindow("Vulkan+SDL2 Application", @@ -330,6 +328,7 @@ void VulkanApp::init() { throw std::runtime_error("Could not create Vulkan surface!"); } + // TODO: Replace some of this crap with vkbootstrap code selectPhysicalDevice(); createLogicalDevice(); createSwapChain(); @@ -349,7 +348,8 @@ void VulkanApp::createInstance() { // Get # of extensions then get extensions uint32_t extensionCount = 0; - const char * const * extensionArr = SDL_Vulkan_GetInstanceExtensions(&extensionCount); + const char * const *extensionArr = SDL_Vulkan_GetInstanceExtensions(&extensionCount); + // Put extensions into vector std::vector extensionNames(extensionArr, extensionArr + extensionCount); if(enableValidationLayers) @@ -358,11 +358,11 @@ void VulkanApp::createInstance() { // App info VkApplicationInfo appInfo{}; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; - appInfo.pApplicationName = "Simple Triangle"; - appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); + appInfo.pApplicationName = "Triangle"; + appInfo.applicationVersion = VK_MAKE_VERSION(1, 1, 0); appInfo.pEngineName = "RAPT2"; - appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0); - appInfo.apiVersion = VK_API_VERSION_1_0; + appInfo.engineVersion = VK_MAKE_VERSION(1, 1, 0); + appInfo.apiVersion = VK_API_VERSION_1_3; // Extensions VkInstanceCreateInfo createInfo{}; @@ -404,9 +404,8 @@ void VulkanApp::selectPhysicalDevice() { uint32_t deviceCount = 0; vkEnumeratePhysicalDevices(mInstance, &deviceCount, nullptr); - if(deviceCount == 0) { + if(deviceCount == 0) throw std::runtime_error("Could not find a Vulkan compatible GPU!"); - } std::vector devices(deviceCount); vkEnumeratePhysicalDevices(mInstance, &deviceCount, devices.data()); @@ -419,9 +418,8 @@ void VulkanApp::selectPhysicalDevice() { } } - if(mPhysicalDevice == VK_NULL_HANDLE) { + if(mPhysicalDevice == VK_NULL_HANDLE) throw std::runtime_error("Could not find any suitable GPU!"); - } } void VulkanApp::createLogicalDevice() { @@ -885,9 +883,8 @@ void VulkanApp::cleanup() { vkDestroyDevice(mLogicalDevice, nullptr); - if (enableValidationLayers) { + if (enableValidationLayers) DestroyDebugUtilsMessengerEXT(mInstance, mDebugMessenger, nullptr); - } vkDestroySurfaceKHR(mInstance, mSurface, nullptr); vkDestroyInstance(mInstance, nullptr);