57 lines
1.9 KiB
CMake
57 lines
1.9 KiB
CMake
# 查找编译器和Python
|
|
find_program(PYTHON_EXECUTABLE python3)
|
|
if (NOT PYTHON_EXECUTABLE)
|
|
find_program(PYTHON_EXECUTABLE python)
|
|
endif ()
|
|
if (NOT PYTHON_EXECUTABLE)
|
|
message(FATAL_ERROR "无法找到Python解释器")
|
|
endif ()
|
|
find_program(SLANG_COMPILER slangc REQUIRED)
|
|
|
|
message(STATUS "Python解释器: ${PYTHON_EXECUTABLE}")
|
|
message(STATUS "SLANG编译器: ${SLANG_COMPILER}")
|
|
|
|
set(SHADER_PATH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/shader_paths.txt)
|
|
set(SHADER_HEADER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/cache)
|
|
set(SHADER_HEADER_FILE ${SHADER_HEADER_DIR}/shader_loader.h)
|
|
# 创建文件
|
|
file(WRITE ${SHADER_HEADER_FILE} "")
|
|
|
|
# 删除文件
|
|
file(REMOVE ${SHADER_PATH_FILE})
|
|
|
|
function(shader_compile_target INPUT_DIR)
|
|
# 将路径写到scripts/shader_paths.txt中
|
|
file(WRITE ${SHADER_PATH_FILE} ${INPUT_DIR})
|
|
endfunction()
|
|
|
|
set(SLANGC_ARGS "")
|
|
if (LLGL_BUILD_RENDERER_OPENGL OR LLGL_BUILD_RENDERER_OPENGLES3 OR LLGL_BUILD_RENDERER_WEBGL)
|
|
list(APPEND SLANGC_ARGS "--opengl")
|
|
endif ()
|
|
if (LLGL_BUILD_RENDERER_VULKAN)
|
|
list(APPEND SLANGC_ARGS "--vulkan")
|
|
endif ()
|
|
if (LLGL_BUILD_RENDERER_DIRECT3D11)
|
|
list(APPEND SLANGC_ARGS "--d3d11")
|
|
endif ()
|
|
if (LLGL_BUILD_RENDERER_DIRECT3D12)
|
|
list(APPEND SLANGC_ARGS "--d3d12")
|
|
endif ()
|
|
if (LLGL_BUILD_RENDERER_METAL)
|
|
list(APPEND SLANGC_ARGS "--metal")
|
|
endif ()
|
|
# 如果是Debug模式, 添加--debug选项
|
|
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
|
|
list(APPEND SLANGC_ARGS "--debug")
|
|
endif ()
|
|
|
|
message(STATUS "着色器编译输出路径: ${SHADER_OUTPUT_DIR}")
|
|
|
|
# 添加自定义命令, 用于编译着色器, 调用scripts/compile_shaders.py
|
|
add_custom_target(compile_shaders
|
|
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/compile_shaders.py --header ${SHADER_HEADER_FILE} --shader-list ${SHADER_PATH_FILE} --output-dir ${SHADER_OUTPUT_DIR} ${SLANGC_ARGS}
|
|
COMMENT "编译着色器"
|
|
VERBATIM
|
|
)
|