# 查找编译器和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 )