@@ -51,12 +51,12 @@ if(ENABLE_CPP20_MODULE)
5151 endif ()
5252
5353 target_sources (VulkanCppModule
54- PUBLIC
55- FILE_SET cxx_modules TYPE CXX_MODULES
56- BASE_DIRS
57- "${Vulkan_INCLUDE_DIR} "
58- FILES
59- "${Vulkan_INCLUDE_DIR} /vulkan/vulkan.cppm"
54+ PUBLIC
55+ FILE_SET cxx_modules TYPE CXX_MODULES
56+ BASE_DIRS
57+ "${Vulkan_INCLUDE_DIR} "
58+ FILES
59+ "${Vulkan_INCLUDE_DIR} /vulkan/vulkan.cppm"
6060 )
6161
6262
@@ -85,7 +85,12 @@ find_program(SLANGC_EXECUTABLE slangc HINTS $ENV{VULKAN_SDK}/bin REQUIRED)
8585
8686function (add_shaders_target TARGET )
8787 cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
88- set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
88+ if (${CMAKE_GENERATOR } MATCHES "Visual Studio.*" OR
89+ ${CMAKE_GENERATOR } MATCHES "Ninja Multi-Config" )
90+ set (SHADERS_DIR ${CMAKE_BINARY_DIR } /${SHADER_CHAPTER_NAME} /$<CONFIG >/shaders)
91+ else ()
92+ set (SHADERS_DIR ${CMAKE_BINARY_DIR } /${SHADER_CHAPTER_NAME} /shaders)
93+ endif ()
8994 add_custom_command (
9095 OUTPUT ${SHADERS_DIR}
9196 COMMAND ${CMAKE_COMMAND } -E make_directory ${SHADERS_DIR}
@@ -95,32 +100,37 @@ function (add_shaders_target TARGET)
95100 COMMAND glslang::validator
96101 ARGS --target-env vulkan1.0 ${SHADER_SOURCES} --quiet
97102 WORKING_DIRECTORY ${SHADERS_DIR}
98- DEPENDS ${SHADERS_DIR} ${ SHADER_SOURCES}
99- COMMENT "Compiling Shaders"
103+ DEPENDS ${SHADER_SOURCES}
104+ COMMENT "Compiling Shaders for ${TARGET} "
100105 VERBATIM
101106 )
102107 add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /frag.spv ${SHADERS_DIR} /vert.spv )
103108endfunction ()
104109
105110function (add_slang_shader_target TARGET )
106111 cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN} )
107- set (SHADERS_DIR ${SHADER_CHAPTER_NAME} /shaders)
112+ if (${CMAKE_GENERATOR } MATCHES "Visual Studio.*" OR
113+ ${CMAKE_GENERATOR } MATCHES "Ninja Multi-Config" )
114+ set (SHADERS_DIR ${CMAKE_BINARY_DIR } /${SHADER_CHAPTER_NAME} /$<CONFIG >/shaders)
115+ else ()
116+ set (SHADERS_DIR ${CMAKE_BINARY_DIR } /${SHADER_CHAPTER_NAME} /shaders)
117+ endif ()
108118 file (GLOB HAS_COMPUTE ${CHAPTER_SHADER} .comp )
109119 set (ENTRY_POINTS -entry vertMain -entry fragMain)
110120 if (HAS_COMPUTE)
111121 list (APPEND ENTRY_POINTS -entry compMain)
112122 endif ()
113123 add_custom_command (
114- OUTPUT ${SHADERS_DIR}
115- COMMAND ${CMAKE_COMMAND } -E make_directory ${SHADERS_DIR}
124+ OUTPUT ${SHADERS_DIR}
125+ COMMAND ${CMAKE_COMMAND } -E make_directory ${SHADERS_DIR}
116126 )
117127 add_custom_command (
118- OUTPUT ${SHADERS_DIR} /slang.spv
119- COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4+spvRayQueryKHR -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv
120- WORKING_DIRECTORY ${SHADERS_DIR}
121- DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
122- COMMENT "Compiling Slang Shaders"
123- VERBATIM
128+ OUTPUT ${SHADERS_DIR} /slang.spv
129+ COMMAND ${SLANGC_EXECUTABLE} ${SHADER_SOURCES} -target spirv -profile spirv_1_4+spvRayQueryKHR -emit-spirv-directly -fvk-use-entrypoint-name ${ENTRY_POINTS} -o slang.spv
130+ WORKING_DIRECTORY ${SHADERS_DIR}
131+ DEPENDS ${SHADER_SOURCES}
132+ COMMENT "Compiling Slang Shaders for ${TARGET} "
133+ VERBATIM
124134 )
125135 add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR} /slang.spv )
126136endfunction ()
@@ -165,15 +175,45 @@ function (add_chapter CHAPTER_NAME)
165175 target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS} )
166176 endif ()
167177 if (DEFINED CHAPTER_MODELS)
168- list (TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_SOURCE_DIR } /assets/" )
178+ list (TRANSFORM CHAPTER_MODELS PREPEND "${CMAKE_CURRENT_SOURCE_DIR } /assets/" )
169179 file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR } /${CHAPTER_NAME}/models )
180+
181+ if (${CMAKE_GENERATOR } MATCHES "Visual Studio.*" OR
182+ ${CMAKE_GENERATOR } MATCHES "Ninja Multi-Config" )
183+ sync_directory (
184+ "${CMAKE_BINARY_DIR } /${CHAPTER_NAME} /models"
185+ "${CMAKE_BINARY_DIR } /${CHAPTER_NAME} /$<CONFIG >/models"
186+ ${CHAPTER_NAME}
187+ "${CHAPTER_NAME} - Models"
188+ )
189+ endif ()
170190 endif ()
171191 if (DEFINED CHAPTER_TEXTURES)
172- list (TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_SOURCE_DIR } /assets/" )
192+ list (TRANSFORM CHAPTER_TEXTURES PREPEND "${CMAKE_CURRENT_SOURCE_DIR } /assets/" )
173193 file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR } /${CHAPTER_NAME}/textures )
194+
195+ if (${CMAKE_GENERATOR } MATCHES "Visual Studio.*" OR
196+ ${CMAKE_GENERATOR } MATCHES "Ninja Multi-Config" )
197+ sync_directory (
198+ "${CMAKE_BINARY_DIR } /${CHAPTER_NAME} /textures"
199+ "${CMAKE_BINARY_DIR } /${CHAPTER_NAME} /$<CONFIG >/textures"
200+ ${CHAPTER_NAME}
201+ "${CHAPTER_NAME} - Textures"
202+ )
203+ endif ()
174204 endif ()
175205endfunction ()
176206
207+ function (sync_directory SRC_DIR DST_DIR TARGET_NAME LABEL )
208+ add_custom_command (
209+ TARGET ${TARGET_NAME}
210+ POST_BUILD
211+ COMMAND ${CMAKE_COMMAND } -E make_directory "${DST_DIR} "
212+ COMMAND ${CMAKE_COMMAND } -E copy_directory_if_different "${SRC_DIR} " "${DST_DIR} "
213+ COMMENT "${LABEL} : Syncing directory"
214+ )
215+ endfunction ()
216+
177217add_chapter (00_base_code )
178218
179219add_chapter (01_instance_creation )
0 commit comments