如何在使用 Cmake 构建期间编译 HLSL 着色器?

发布于 2025-01-10 16:42:30 字数 455 浏览 1 评论 0原文

我正在开发 d3d 应用程序,我想在使用 cmake 构建期间编译我的 .hlsl 着色器。 我不知道从哪里开始。

这是我当前的 CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(Direct3DTut)

set(CMAKE_CXX_STANDARD 17)

add_executable(${PROJECT_NAME} WIN32
                WinMain.cpp Window.cpp MessageHandler.cpp Graphics.cpp
                Keyboard.cpp Mouse.cpp
                Utils.cpp)

set(LIBS d3d11 D3DCompiler)
target_link_libraries(${PROJECT_NAME} ${LIBS})

I'm working on a d3d application and i would like to compile my .hlsl shaders during to build using cmake.
I have no idea where to start.

this is my current CMakeLists.txt

cmake_minimum_required(VERSION 3.20)
project(Direct3DTut)

set(CMAKE_CXX_STANDARD 17)

add_executable(${PROJECT_NAME} WIN32
                WinMain.cpp Window.cpp MessageHandler.cpp Graphics.cpp
                Keyboard.cpp Mouse.cpp
                Utils.cpp)

set(LIBS d3d11 D3DCompiler)
target_link_libraries(${PROJECT_NAME} ${LIBS})

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花落人断肠 2025-01-17 16:42:30

我将此模式用于可与 Ninja 和 MSVC 生成器一起使用的 CMake 着色器。

# Build HLSL shaders
add_custom_target(shaders)

set(HLSL_SHADER_FILES VertexShader.hlsl PixelShader.hlsl)

set_source_files_properties(VertexShader.hlsl PROPERTIES ShaderType "vs")
set_source_files_properties(PixelShader.hlsl PROPERTIES ShaderType "ps")
set_source_files_properties(${HLSL_SHADER_FILES} PROPERTIES ShaderModel "4_0")

foreach(FILE ${HLSL_SHADER_FILES})
  get_filename_component(FILE_WE ${FILE} NAME_WE)
  get_source_file_property(shadertype ${FILE} ShaderType)
  get_source_file_property(shadermodel ${FILE} ShaderModel)
  add_custom_command(TARGET shaders
                     COMMAND fxc.exe /nologo /Emain /T${shadertype}_${shadermodel} 
lt;IF:
lt;CONFIG:DEBUG>,/Od,/O1> /Zi /Fo ${CMAKE_BINARY_DIR}/${FILE_WE}.cso /Fd ${CMAKE_BINARY_DIR}/${FILE_WE}.pdb ${FILE}
                     MAIN_DEPENDENCY ${FILE}
                     COMMENT "HLSL ${FILE}"
                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                     VERBATIM)
endforeach(FILE)

...

add_dependencies(${PROJECT_NAME} shaders)

我在我的DirectX 工具包教程中使用了它。您还可以在 directx-vs 上查看 CMake 的其余部分-模板

I use this pattern for CMake shaders that works with both Ninja and the MSVC generators.

# Build HLSL shaders
add_custom_target(shaders)

set(HLSL_SHADER_FILES VertexShader.hlsl PixelShader.hlsl)

set_source_files_properties(VertexShader.hlsl PROPERTIES ShaderType "vs")
set_source_files_properties(PixelShader.hlsl PROPERTIES ShaderType "ps")
set_source_files_properties(${HLSL_SHADER_FILES} PROPERTIES ShaderModel "4_0")

foreach(FILE ${HLSL_SHADER_FILES})
  get_filename_component(FILE_WE ${FILE} NAME_WE)
  get_source_file_property(shadertype ${FILE} ShaderType)
  get_source_file_property(shadermodel ${FILE} ShaderModel)
  add_custom_command(TARGET shaders
                     COMMAND fxc.exe /nologo /Emain /T${shadertype}_${shadermodel} 
lt;IF:
lt;CONFIG:DEBUG>,/Od,/O1> /Zi /Fo ${CMAKE_BINARY_DIR}/${FILE_WE}.cso /Fd ${CMAKE_BINARY_DIR}/${FILE_WE}.pdb ${FILE}
                     MAIN_DEPENDENCY ${FILE}
                     COMMENT "HLSL ${FILE}"
                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
                     VERBATIM)
endforeach(FILE)

...

add_dependencies(${PROJECT_NAME} shaders)

I use this in my DirectX Tool Kit tutorials. You can also see the rest of the CMake on directx-vs-templates.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文