Add add_shaders add_data CMake functions
This commit is contained in:
parent
13298daa55
commit
82ede190a6
6 changed files with 72 additions and 56 deletions
|
@ -3,6 +3,9 @@ project(Graph)
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
|
||||||
|
|
||||||
|
include(cmake/BuildShaders.cmake)
|
||||||
|
include(cmake/CopyData.cmake)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14)
|
set(CMAKE_CXX_STANDARD 14)
|
||||||
|
|
||||||
find_package(SDL2 REQUIRED)
|
find_package(SDL2 REQUIRED)
|
||||||
|
@ -21,22 +24,11 @@ add_executable(Graph
|
||||||
target_link_libraries(Graph PUBLIC SDL2::SDL2 SDL2::SDL2main Vulkan::Vulkan assimp::assimp)
|
target_link_libraries(Graph PUBLIC SDL2::SDL2 SDL2::SDL2main Vulkan::Vulkan assimp::assimp)
|
||||||
target_include_directories(Graph PUBLIC include)
|
target_include_directories(Graph PUBLIC include)
|
||||||
|
|
||||||
macro(compile_shader src)
|
add_shaders(Graph
|
||||||
add_custom_command(
|
shaders/triangle.vert
|
||||||
OUTPUT ${src}.spv
|
shaders/triangle.frag
|
||||||
COMMAND glslangValidator -V ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${src} -o ${CMAKE_CURRENT_BINARY_DIR}/${src}.spv
|
shaders/post.vert
|
||||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/shaders/${src}
|
shaders/post.frag)
|
||||||
)
|
|
||||||
|
|
||||||
list(APPEND SPV_FILES ${src}.spv)
|
add_data(Graph
|
||||||
endmacro()
|
data/suzanne.obj)
|
||||||
|
|
||||||
compile_shader(triangle.vert)
|
|
||||||
compile_shader(triangle.frag)
|
|
||||||
compile_shader(post.vert)
|
|
||||||
compile_shader(post.frag)
|
|
||||||
|
|
||||||
add_custom_target(BuildShaders DEPENDS ${SPV_FILES})
|
|
||||||
add_dependencies(Graph BuildShaders)
|
|
||||||
|
|
||||||
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/data/suzanne.obj ${CMAKE_CURRENT_BINARY_DIR}/suzanne.obj COPYONLY)
|
|
||||||
|
|
16
cmake/BuildShaders.cmake
Normal file
16
cmake/BuildShaders.cmake
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
function(add_shaders target)
|
||||||
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/shaders)
|
||||||
|
|
||||||
|
foreach(src IN LISTS ARGN)
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${src}.spv
|
||||||
|
COMMAND glslangValidator -V ${CMAKE_CURRENT_SOURCE_DIR}/${src} -o ${CMAKE_CURRENT_BINARY_DIR}/${src}.spv
|
||||||
|
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${src}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND SPV_FILES ${src}.spv)
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_custom_target(BuildShaders DEPENDS ${SPV_FILES})
|
||||||
|
add_dependencies(${target} BuildShaders)
|
||||||
|
endfunction()
|
8
cmake/CopyData.cmake
Normal file
8
cmake/CopyData.cmake
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
function(add_data target)
|
||||||
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/data)
|
||||||
|
|
||||||
|
foreach(data IN LISTS ARGN)
|
||||||
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${data} ${CMAKE_CURRENT_BINARY_DIR}/${data} COPYONLY)
|
||||||
|
endforeach()
|
||||||
|
endfunction()
|
||||||
|
|
|
@ -116,7 +116,7 @@ int main(int, char*[]) {
|
||||||
RenderTarget* target = renderer->createSurfaceRenderTarget(surface);
|
RenderTarget* target = renderer->createSurfaceRenderTarget(surface);
|
||||||
|
|
||||||
Assimp::Importer importer;
|
Assimp::Importer importer;
|
||||||
const aiScene* scene = importer.ReadFile("suzanne.obj", aiProcess_Triangulate);
|
const aiScene* scene = importer.ReadFile("data/suzanne.obj", aiProcess_Triangulate);
|
||||||
|
|
||||||
aiMesh* m = scene->mMeshes[0];
|
aiMesh* m = scene->mMeshes[0];
|
||||||
Mesh* mesh = new Mesh();
|
Mesh* mesh = new Mesh();
|
||||||
|
|
|
@ -75,8 +75,8 @@ void PostPass::createDescriptorSetLayout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void PostPass::createPipeline() {
|
void PostPass::createPipeline() {
|
||||||
VkShaderModule vertShaderModule = renderer_.createShader("post.vert.spv");
|
VkShaderModule vertShaderModule = renderer_.createShader("shaders/post.vert.spv");
|
||||||
VkShaderModule fragShaderModule = renderer_.createShader("post.frag.spv");
|
VkShaderModule fragShaderModule = renderer_.createShader("shaders/post.frag.spv");
|
||||||
|
|
||||||
VkPipelineShaderStageCreateInfo vertShaderStageInfo = {};
|
VkPipelineShaderStageCreateInfo vertShaderStageInfo = {};
|
||||||
vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||||
|
|
|
@ -143,8 +143,8 @@ void WorldPass::createDescriptorSetLayout() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldPass::createPipeline() {
|
void WorldPass::createPipeline() {
|
||||||
VkShaderModule vertShaderModule = renderer_.createShader("triangle.vert.spv");
|
VkShaderModule vertShaderModule = renderer_.createShader("shaders/triangle.vert.spv");
|
||||||
VkShaderModule fragShaderModule = renderer_.createShader("triangle.frag.spv");
|
VkShaderModule fragShaderModule = renderer_.createShader("shaders/triangle.frag.spv");
|
||||||
|
|
||||||
VkPipelineShaderStageCreateInfo vertShaderStageInfo = {};
|
VkPipelineShaderStageCreateInfo vertShaderStageInfo = {};
|
||||||
vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
|
||||||
|
|
Reference in a new issue