From a543c820d46257a94909459e9a4ebade475e9c4e Mon Sep 17 00:00:00 2001 From: Euclid Skyline Date: Sat, 13 Sep 2025 23:57:49 +0300 Subject: [PATCH 1/5] Update .gitignore to exclude build and vcpkg_installed directories; add project CMakeLists.txt to root directory to run cmake from root directory. --- .gitignore | 3 ++- CMakeLists.txt | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt diff --git a/.gitignore b/.gitignore index 5a4347ec..d2de4ca4 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ ebook/*.epub convert.py -attachments/build/ \ No newline at end of file +**/build/* +**/vcpkg_installed/* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..6fc71f2e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required (VERSION 3.29) + +project (VulkanTutorial) + +add_subdirectory(attachments) \ No newline at end of file From 3ef1339765e5e5721087cb0f3f8fb23633f26c22 Mon Sep 17 00:00:00 2001 From: Euclid Skyline Date: Sun, 14 Sep 2025 00:14:17 +0300 Subject: [PATCH 2/5] Refactor shader target functions in attchments/CMakeLists.txt to fix MSBuild warning (MSB8065/MSB8064) and add post-build commands to move shaders/models/textures to correct executable directory for Visual Studio --- attachments/CMakeLists.txt | 118 ++++++++++++++++++++++++++----------- 1 file changed, 85 insertions(+), 33 deletions(-) diff --git a/attachments/CMakeLists.txt b/attachments/CMakeLists.txt index 5648cb92..c002f103 100644 --- a/attachments/CMakeLists.txt +++ b/attachments/CMakeLists.txt @@ -56,46 +56,48 @@ find_program (GLSLANG_VALIDATOR "glslangValidator" HINTS $ENV{VULKAN_SDK}/bin RE set_property (TARGET glslang::validator PROPERTY IMPORTED_LOCATION "${GLSLANG_VALIDATOR}") find_program(SLANGC_EXECUTABLE slangc HINTS $ENV{VULKAN_SDK}/bin REQUIRED) -function (add_shaders_target TARGET) - cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN}) - set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders) - add_custom_command ( - OUTPUT ${SHADERS_DIR} +function(add_shaders_target TARGET) + cmake_parse_arguments(SHADER "" "CHAPTER_NAME" "SOURCES" ${ARGN}) + + set(SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/shaders) + message(STATUS "${TARGET} Shaders will be output to: ${SHADERS_DIR}") + + # Ensure the shaders directory exists + file(MAKE_DIRECTORY ${SHADERS_DIR}) + + add_custom_target(${TARGET} COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR} - ) - add_custom_command ( - OUTPUT ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv - COMMAND glslang::validator - ARGS --target-env vulkan1.0 ${SHADER_SOURCES} --quiet - WORKING_DIRECTORY ${SHADERS_DIR} - DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES} - COMMENT "Compiling Shaders" + COMMAND glslang::validator --target-env vulkan1.0 ${SHADER_SOURCES} --quiet + WORKING_DIRECTORY ${SHADERS_DIR} + COMMENT "Compiling Shaders for ${TARGET}" VERBATIM - ) - add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv) -endfunction () + ) +endfunction() + +function(add_slang_shader_target TARGET) + cmake_parse_arguments(SHADER "" "CHAPTER_NAME" "SOURCES" ${ARGN}) -function (add_slang_shader_target TARGET) - cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN}) - set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders) + set(SHADERS_DIR ${CMAKE_BINARY_DIR}/${SHADER_CHAPTER_NAME}/shaders) + message(STATUS "${TARGET} Slang shaders will be output to: ${SHADERS_DIR}") + # Ensure the shaders directory exists + file(MAKE_DIRECTORY ${SHADERS_DIR}) + + set(ENTRY_POINTS -entry vertMain -entry fragMain) file(GLOB HAS_COMPUTE ${CHAPTER_SHADER}.comp) - set (ENTRY_POINTS -entry vertMain -entry fragMain) if(HAS_COMPUTE) list(APPEND ENTRY_POINTS -entry compMain) endif() - add_custom_command ( - OUTPUT ${SHADERS_DIR} - COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR} - ) - add_custom_command ( - OUTPUT ${SHADERS_DIR}/slang.spv - COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4 -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv - WORKING_DIRECTORY ${SHADERS_DIR} - DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES} - COMMENT "Compiling Slang Shaders" - VERBATIM + + add_custom_target(${TARGET} + COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR} + COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} + -target spirv -profile spirv_1_4 -emit-spirv-directly + -fvk-use-entrypoint-name ${ENTRY_POINTS} + -o slang.spv + WORKING_DIRECTORY ${SHADERS_DIR} + COMMENT "Compiling Slang Shaders for ${TARGET}" + VERBATIM ) - add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR}/slang.spv) endfunction() function (add_chapter CHAPTER_NAME) @@ -133,8 +135,58 @@ function (add_chapter CHAPTER_NAME) file (COPY assets/${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models) endif () if (DEFINED CHAPTER_TEXTURES) - file (COPY assets/${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures) + file (COPY assets/${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures) endif () + + if(WIN32) + if(${CMAKE_GENERATOR} MATCHES "Visual Studio.*") + set(EXECUTABLE_DIR $) + + add_custom_target(${CHAPTER_NAME}_postbuild ALL + COMMENT "${CHAPTER_NAME}: Post-build asset sync" + ) + + if(DEFINED CHAPTER_SHADER) + add_custom_command(TARGET ${CHAPTER_NAME}_postbuild POST_BUILD + COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR}/shaders + COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR}/shaders + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/shaders + ${EXECUTABLE_DIR}/shaders + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/shaders + COMMENT "${CHAPTER_NAME}: Copying shaders to executable directory (Visual Studio)" + ) + add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME}) + + endif() + if(DEFINED CHAPTER_MODELS) + add_custom_command(TARGET ${CHAPTER_NAME}_postbuild POST_BUILD + COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR}/models + COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR}/models + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models + ${EXECUTABLE_DIR}/models + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models + COMMENT "${CHAPTER_NAME}: Copying models to executable directory (Visual Studio)" + ) + add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME}) + + endif() + if(DEFINED CHAPTER_TEXTURES) + add_custom_command(TARGET ${CHAPTER_NAME}_postbuild POST_BUILD + COMMAND ${CMAKE_COMMAND} -E remove_directory ${EXECUTABLE_DIR}/textures + COMMAND ${CMAKE_COMMAND} -E make_directory ${EXECUTABLE_DIR}/textures + COMMAND ${CMAKE_COMMAND} -E copy_directory + ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures + ${EXECUTABLE_DIR}/textures + COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures + COMMENT "${CHAPTER_NAME}: Copying textures to executable directory (Visual Studio)" + ) + add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME}) + + endif() + endif() + endif() endfunction () add_chapter (00_base_code) From e1d2a9550b3c1e4dd3359478f7ac920f318cc8c5 Mon Sep 17 00:00:00 2001 From: Euclid Skyline <49879445+euclid-skyline@users.noreply.github.com> Date: Sat, 20 Dec 2025 18:28:07 +0300 Subject: [PATCH 3/5] Update asset paths in CMakeLists.txt --- attachments/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/attachments/CMakeLists.txt b/attachments/CMakeLists.txt index fad24721..a8df140f 100644 --- a/attachments/CMakeLists.txt +++ b/attachments/CMakeLists.txt @@ -164,11 +164,11 @@ function (add_chapter CHAPTER_NAME) target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS}) endif () if (DEFINED CHAPTER_MODELS) - list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_SOURCE_DIR}/assets/") + list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_SOURCE_DIR}/attachments/assets/") file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models) endif () if (DEFINED CHAPTER_TEXTURES) - list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_SOURCE_DIR}/assets/") + list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_SOURCE_DIR}/attachments/assets/") file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures) endif () From 09e81a43319a80dba87e7c59b06ba2382fdad8e6 Mon Sep 17 00:00:00 2001 From: Euclid Skyline <49879445+euclid-skyline@users.noreply.github.com> Date: Sat, 20 Dec 2025 23:00:30 +0300 Subject: [PATCH 4/5] Update asset paths to use current source directory --- attachments/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/attachments/CMakeLists.txt b/attachments/CMakeLists.txt index a8df140f..e2a02d9b 100644 --- a/attachments/CMakeLists.txt +++ b/attachments/CMakeLists.txt @@ -164,11 +164,11 @@ function (add_chapter CHAPTER_NAME) target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS}) endif () if (DEFINED CHAPTER_MODELS) - list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_SOURCE_DIR}/attachments/assets/") + list(TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/assets/") file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models) endif () if (DEFINED CHAPTER_TEXTURES) - list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_SOURCE_DIR}/attachments/assets/") + list(TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/assets/") file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures) endif () From f7a1140ba4f344905f52799e166afea1d66572b2 Mon Sep 17 00:00:00 2001 From: Euclid Skyline <49879445+euclid-skyline@users.noreply.github.com> Date: Sun, 21 Dec 2025 15:30:28 +0300 Subject: [PATCH 5/5] Remove directory cleanup commands from CMakeLists Removed commands to remove shader, model, and texture directories after copying them to the executable directory. This allows Visual Studio to keep working correctly on subprojects (shader, model and texture) without failures. --- attachments/CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/attachments/CMakeLists.txt b/attachments/CMakeLists.txt index e2a02d9b..9890a51e 100644 --- a/attachments/CMakeLists.txt +++ b/attachments/CMakeLists.txt @@ -187,7 +187,6 @@ function (add_chapter CHAPTER_NAME) COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/shaders ${EXECUTABLE_DIR}/shaders - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/shaders COMMENT "${CHAPTER_NAME}: Copying shaders to executable directory (Visual Studio)" ) add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME}) @@ -200,7 +199,6 @@ function (add_chapter CHAPTER_NAME) COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models ${EXECUTABLE_DIR}/models - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models COMMENT "${CHAPTER_NAME}: Copying models to executable directory (Visual Studio)" ) add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME}) @@ -213,7 +211,6 @@ function (add_chapter CHAPTER_NAME) COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures ${EXECUTABLE_DIR}/textures - COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures COMMENT "${CHAPTER_NAME}: Copying textures to executable directory (Visual Studio)" ) add_dependencies(${CHAPTER_NAME}_postbuild ${CHAPTER_NAME})