add_executable(HelloVulkan main.cpp)

target_link_libraries(HelloVulkan PRIVATE Engine)


###### 自动构建shader ######
find_program(GLSLC glslc REQUIRED)

set(SHADER_SRC_DIR ${CMAKE_SOURCE_DIR}/shaders)
set(SHADER_OUT_DIR ${CMAKE_BINARY_DIR}/bin/shaders)

# 定义一个 shader 编译目标：<name>(glsl_file stage)
function(auto_compile_shader glsl_file stage)
    # string(REGEX REPLACE "\\.glsl$" "" base "${glsl_file}")
    set(spv ${SHADER_OUT_DIR}/${glsl_file}.spv)
    add_custom_command(
            OUTPUT ${spv}
            COMMAND ${GLSLC} -fshader-stage=${stage} -o ${spv} ${SHADER_SRC_DIR}/${glsl_file}
            DEPENDS ${SHADER_SRC_DIR}/${glsl_file}
            VERBATIM)
    set_source_files_properties(${spv} PROPERTIES GENERATED TRUE)
    target_sources(${PROJECT_NAME} PRIVATE ${spv})
    set_property(DIRECTORY APPEND PROPERTY HZ_SHADER_SPV_FILES ${spv})
endfunction()

auto_compile_shader(simple_shader.vert vert)
auto_compile_shader(simple_shader.frag frag)
