Skip to content

Commit 2b41d46

Browse files
kovrovsergk
authored and
sergk
committed
Code samples: add CMakeLists.txt
Calling `cmake --build .` will build the sample code executables for each chapter in it's own folders, compile corresponding shaders and copy all required resources to appropriate sub-folders. After that any example is ready to be run from it's build sub-folder. CMake project requires following dependencies: * glfw3 dev package * glm dev package * stb_image header * tinyobjloader dev package * Vulkan sdk
1 parent 4b36689 commit 2b41d46

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed

code/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
CMakeLists.txt.user

code/CMakeLists.txt

Lines changed: 172 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,172 @@
1+
cmake_minimum_required (VERSION 3.8)
2+
3+
project (VulkanTutorial)
4+
5+
find_package (glfw3 REQUIRED)
6+
find_package (glm REQUIRED)
7+
find_package (Vulkan REQUIRED)
8+
find_package (tinyobjloader REQUIRED)
9+
10+
find_package (PkgConfig)
11+
pkg_get_variable (STB_INCLUDEDIR stb includedir)
12+
if (NOT STB_INCLUDEDIR)
13+
unset (STB_INCLUDEDIR)
14+
find_path (STB_INCLUDEDIR stb_image.h PATH_SUFFIXES stb)
15+
endif ()
16+
if (NOT STB_INCLUDEDIR)
17+
message (FATAL_ERROR "stb_image.h not found")
18+
endif ()
19+
20+
add_executable (glslang::validator IMPORTED)
21+
find_program (GLSLANG_VALIDATOR "glslangValidator" HINTS $ENV{VULKAN_SDK}/bin REQUIRED)
22+
set_property (TARGET glslang::validator PROPERTY IMPORTED_LOCATION "${GLSLANG_VALIDATOR}")
23+
24+
function (add_shaders_target TARGET)
25+
cmake_parse_arguments ("SHADER" "" "CHAPTER_NAME" "SOURCES" ${ARGN})
26+
set (SHADERS_DIR ${SHADER_CHAPTER_NAME}/shaders)
27+
add_custom_command (
28+
OUTPUT ${SHADERS_DIR}
29+
COMMAND ${CMAKE_COMMAND} -E make_directory ${SHADERS_DIR}
30+
)
31+
add_custom_command (
32+
OUTPUT ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv
33+
COMMAND glslang::validator
34+
ARGS --target-env vulkan1.2 ${SHADER_SOURCES} --quiet
35+
WORKING_DIRECTORY ${SHADERS_DIR}
36+
DEPENDS ${SHADERS_DIR} ${SHADER_SOURCES}
37+
COMMENT "Compiling Shaders"
38+
VERBATIM
39+
)
40+
add_custom_target (${TARGET} DEPENDS ${SHADERS_DIR}/frag.spv ${SHADERS_DIR}/vert.spv)
41+
endfunction ()
42+
43+
function (add_chapter CHAPTER_NAME)
44+
cmake_parse_arguments (CHAPTER "" "SHADER" "LIBS;TEXTURES;MODELS" ${ARGN})
45+
46+
add_executable (${CHAPTER_NAME} ${CHAPTER_NAME}.cpp)
47+
set_target_properties (${CHAPTER_NAME} PROPERTIES
48+
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CHAPTER_NAME})
49+
set_target_properties (${CHAPTER_NAME} PROPERTIES CXX_STANDARD 17)
50+
target_link_libraries (${CHAPTER_NAME} Vulkan::Vulkan glfw)
51+
target_include_directories (${CHAPTER_NAME} PRIVATE ${STB_INCLUDEDIR})
52+
53+
if (DEFINED CHAPTER_SHADER)
54+
set (CHAPTER_SHADER_TARGET ${CHAPTER_NAME}_shader)
55+
file (GLOB SHADER_SOURCES ${CHAPTER_SHADER}.frag ${CHAPTER_SHADER}.vert)
56+
add_shaders_target (${CHAPTER_SHADER_TARGET} CHAPTER_NAME ${CHAPTER_NAME} SOURCES ${SHADER_SOURCES})
57+
add_dependencies (${CHAPTER_NAME} ${CHAPTER_SHADER_TARGET})
58+
endif ()
59+
if (DEFINED CHAPTER_LIBS)
60+
target_link_libraries (${CHAPTER_NAME} ${CHAPTER_LIBS})
61+
endif ()
62+
if (DEFINED CHAPTER_MODELS)
63+
file (COPY ${CHAPTER_MODELS} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/models)
64+
endif ()
65+
if (DEFINED CHAPTER_TEXTURES)
66+
file (COPY ${CHAPTER_TEXTURES} DESTINATION ${CMAKE_BINARY_DIR}/${CHAPTER_NAME}/textures)
67+
endif ()
68+
endfunction ()
69+
70+
add_chapter (00_base_code)
71+
72+
add_chapter (01_instance_creation)
73+
74+
add_chapter (02_validation_layers)
75+
76+
add_chapter (03_physical_device_selection)
77+
78+
add_chapter (04_logical_device)
79+
80+
add_chapter (05_window_surface)
81+
82+
add_chapter (06_swap_chain_creation)
83+
84+
add_chapter (07_image_views)
85+
86+
add_chapter (08_graphics_pipeline)
87+
88+
add_chapter (09_shader_modules
89+
SHADER 09_shader_base)
90+
91+
add_chapter (10_fixed_functions
92+
SHADER 09_shader_base)
93+
94+
add_chapter (11_render_passes
95+
SHADER 09_shader_base)
96+
97+
add_chapter (12_graphics_pipeline_complete
98+
SHADER 09_shader_base)
99+
100+
add_chapter (13_framebuffers
101+
SHADER 09_shader_base)
102+
103+
add_chapter (14_command_buffers
104+
SHADER 09_shader_base)
105+
106+
add_chapter (15_hello_triangle
107+
SHADER 09_shader_base)
108+
109+
add_chapter (16_swap_chain_recreation
110+
SHADER 09_shader_base)
111+
112+
add_chapter (17_vertex_input
113+
SHADER 17_shader_vertexbuffer
114+
LIBS glm::glm)
115+
116+
add_chapter (18_vertex_buffer
117+
SHADER 17_shader_vertexbuffer
118+
LIBS glm::glm)
119+
120+
add_chapter (19_staging_buffer
121+
SHADER 17_shader_vertexbuffer
122+
LIBS glm::glm)
123+
124+
add_chapter (20_index_buffer
125+
SHADER 17_shader_vertexbuffer
126+
LIBS glm::glm)
127+
128+
add_chapter (21_descriptor_layout
129+
SHADER 21_shader_ubo
130+
LIBS glm::glm)
131+
132+
add_chapter (22_descriptor_sets
133+
SHADER 21_shader_ubo
134+
LIBS glm::glm)
135+
136+
add_chapter (23_texture_image
137+
SHADER 21_shader_ubo
138+
TEXTURES ../images/texture.jpg
139+
LIBS glm::glm)
140+
141+
add_chapter (24_sampler
142+
SHADER 21_shader_ubo
143+
TEXTURES ../images/texture.jpg
144+
LIBS glm::glm)
145+
146+
add_chapter (25_texture_mapping
147+
SHADER 25_shader_textures
148+
TEXTURES ../images/texture.jpg
149+
LIBS glm::glm)
150+
151+
add_chapter (26_depth_buffering
152+
SHADER 26_shader_depth
153+
TEXTURES ../images/texture.jpg
154+
LIBS glm::glm)
155+
156+
add_chapter (27_model_loading
157+
SHADER 26_shader_depth
158+
MODELS ../resources/viking_room.obj
159+
TEXTURES ../resources/viking_room.png
160+
LIBS glm::glm tinyobjloader::tinyobjloader)
161+
162+
add_chapter (28_mipmapping
163+
SHADER 26_shader_depth
164+
MODELS ../resources/viking_room.obj
165+
TEXTURES ../resources/viking_room.png
166+
LIBS glm::glm tinyobjloader::tinyobjloader)
167+
168+
add_chapter (29_multisampling
169+
SHADER 26_shader_depth
170+
MODELS ../resources/viking_room.obj
171+
TEXTURES ../resources/viking_room.png
172+
LIBS glm::glm tinyobjloader::tinyobjloader)

0 commit comments

Comments
 (0)