76 lines
2.5 KiB
CMake
76 lines
2.5 KiB
CMake
include(CMakeParseArguments)
|
||
|
||
# 查找Python解释器
|
||
find_package(Python3 REQUIRED)
|
||
|
||
# 存储脚本路径
|
||
set(SHADER_COMPILE_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/tools/compile_shaders.py")
|
||
|
||
# 在cache目录下创建着色器目录.txt
|
||
set(SHADER_PATH_FILE ${CMAKE_CACHEFILE_DIR}/shader_paths.txt)
|
||
file(REMOVE ${SHADER_PATH_FILE})
|
||
file(WRITE ${SHADER_PATH_FILE} "")
|
||
|
||
# 添加着色器目录的函数
|
||
function(add_mirage_shader_directory path)
|
||
# 将路径写入shader_paths.txt
|
||
file(APPEND ${SHADER_PATH_FILE} "${path}\n")
|
||
|
||
# 观察目录文件是否修改, 触发compile_shaders目标重新编译
|
||
file(GLOB_RECURSE SHADER_FILES "${path}/*.slang")
|
||
|
||
# 设置依赖关系,当shader文件变化时重新编译
|
||
foreach(SHADER_FILE ${SHADER_FILES})
|
||
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${SHADER_FILE})
|
||
endforeach()
|
||
|
||
# 添加到全局变量以便在其他地方使用
|
||
set(SHADER_FILES_GLOBAL ${SHADER_FILES_GLOBAL} ${SHADER_FILES} PARENT_SCOPE)
|
||
endfunction()
|
||
|
||
set(SHADER_COMPILE_ARGS "")
|
||
set(SHADER_SHDC "")
|
||
if (WIN32)
|
||
list(APPEND SHADER_COMPILE_ARGS "--hlsl")
|
||
set(SHADER_SHDC ${MIRAGE_ROOT_DIR}/tools/mirage_shdc.exe)
|
||
elseif (APPLE)
|
||
list(APPEND SHADER_COMPILE_ARGS "--metal")
|
||
set(SHADER_SHDC ${MIRAGE_ROOT_DIR}/tools/mirage_shdc)
|
||
else()
|
||
list(APPEND SHADER_COMPILE_ARGS "--glsl")
|
||
set(SHADER_SHDC ${MIRAGE_ROOT_DIR}/tools/mirage_shdc)
|
||
endif()
|
||
|
||
# 如果是Debug模式, 添加--debug选项
|
||
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||
list(APPEND SHADER_COMPILE_ARGS "--debug")
|
||
endif ()
|
||
|
||
# 添加编译目标, 调用tools/compile_shaders.py
|
||
add_custom_target(compile_shaders ALL
|
||
COMMAND ${Python3_EXECUTABLE} ${SHADER_COMPILE_SCRIPT}
|
||
--shdc ${SHADER_SHDC}
|
||
--shader_list ${SHADER_PATH_FILE}
|
||
${SHADER_COMPILE_ARGS}
|
||
COMMENT "编译着色器"
|
||
VERBATIM
|
||
)
|
||
|
||
# 添加强制重新编译着色器的目标
|
||
add_custom_target(force_recompile_shaders
|
||
COMMAND ${CMAKE_COMMAND} -E remove -f ${SHADER_PATH_FILE}
|
||
COMMAND ${CMAKE_COMMAND} -E touch ${SHADER_PATH_FILE}
|
||
COMMAND ${Python3_EXECUTABLE} ${SHADER_COMPILE_SCRIPT}
|
||
--shdc ${SHADER_SHDC}
|
||
--shader_list ${SHADER_PATH_FILE}
|
||
${SHADER_COMPILE_ARGS}
|
||
--force
|
||
COMMENT "强制重新编译所有着色器"
|
||
VERBATIM
|
||
)
|
||
|
||
# 定义一个宏,将编译着色器作为其他目标的依赖
|
||
function(add_shader_dependencies target)
|
||
add_dependencies(${target} compile_shaders)
|
||
endfunction()
|