# Sets minimum CMake and C++ Standard version # cmake_minimum_required (VERSION 4.0) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) project(VulkanRendererProject) include(FetchContent) # Adds Vulkan to the project # FetchContent_Declare( VulkanHeaders GIT_REPOSITORY https://github.com/KhronosGroup/Vulkan-Headers.git GIT_TAG v1.3.296 ) FetchContent_MakeAvailable(VulkanHeaders) find_package(Vulkan REQUIRED) # Adds GLFW for window creation # FetchContent_Declare( glfw GIT_REPOSITORY https://github.com/glfw/glfw.git GIT_TAG 3.4 ) FetchContent_MakeAvailable(glfw) # Compiles the shaders # set(SHADER_DIR "${CMAKE_SOURCE_DIR}/shaders") file(GLOB SHADERS "${SHADER_DIR}/*.frag" "${SHADER_DIR}/*.vert" ) foreach (SHADER ${SHADERS}) get_filename_component(FILENAME_WE ${SHADER} NAME_WE) set(SPIRV_FILE "${SHADER_DIR}/${FILENAME_WE}.spv") add_custom_command( OUTPUT ${SPIRV_FILE} COMMAND ${Vulkan_GLSLANG_VALIDATOR_EXECUTABLE} -V ${SHADER} -o ${SPIRV_FILE} DEPENDS ${SHADER} COMMENT "Compiling shader ${FILENAME}" ) list(APPEND SPIRV_BINARY_FILES ${SPIRV_FILE}) endforeach() add_custom_target(CompileShaders ALL DEPENDS ${SPIRV_BINARY_FILES}) # Creates the output binary project(VulkanRenderer LANGUAGES CXX) add_executable(VulkanRenderer main.cpp src/managers/GLFWManager.h src/managers/GLFWManager.cpp src/managers/vulkan/VulkanManagerInit.cpp src/managers/vulkan/VulkanManagerRender.cpp src/managers/vulkan/VulkanManager.h src/VulkanRenderer.h src/RendererTypes.h ) add_dependencies(VulkanRenderer CompileShaders) target_precompile_headers(VulkanRenderer PRIVATE src/VulkanRenderer.h) # Links the libraries to the binary # target_link_libraries(VulkanRenderer PRIVATE Vulkan::Vulkan glfw )