Archived
1
Fork 0

Add add_shaders add_data CMake functions

This commit is contained in:
Joshua Goins 2018-10-25 08:40:24 -04:00
parent 13298daa55
commit 82ede190a6
6 changed files with 72 additions and 56 deletions

View file

@ -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
View 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
View 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()

View file

@ -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();

View file

@ -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;

View file

@ -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;