到目前为止,我尝试使用 DirectX 11 项目来加载纹理:
我下载了 DirectXTex 源代码,将源文件包含到我的项目中并尝试编译,但出现错误。我从这些头文件中收到错误:WICTextureLoader.h
、DDSTextureLoader.h
和 DirectXTex.h
。这些错误来自头文件,而不是我自己的代码。然后,我尝试了 WICTextureLoader11.h
和 DDSTextureLoader11.h
,我得到的错误是 对函数 CreateWICTextureFromFile() 的 undefined reference ...
(或相同,但使用 DDS)。
我想,这里的问题可能是编译器(我使用Clang/GCC)找不到.lib
文件?然而,这里有些人提到,你可以将源文件放入你的文件夹中,一切就OK了。看来,这对我来说不太好。如果这是问题所在,是否有一种方法可以获取二进制文件(.lib
),而无需通过 VS 安装和其他操作?
最佳答案
DirectXTex 库可以使用 clang/LLVM for Windows 或 Visual C++ 构建。该项目包括 CMakeLists.txt用于使用 CMake 构建 DirectXTex 库以及可选的命令行工具。如果您有自己的 make 解决方案,则可以通过引用该文件来计算出详细信息。
要使用 DirectXTex 库函数(也称为 LoadWICFromFile
、Compress
等),您需要链接到 DirectXTex 库,您可以在 CMake 中通过 add_subdirectory
和target_link_libraries
。您还需要添加包含路径:
要从您自己的 CMake 使用它:
add_subdirectory(${CMAKE_SOURCE_DIR}/../DirectXTex ${CMAKE_BINARY_DIR}/bin/CMake/DirectXTex)
target_link_libraries(${PROJECT_NAME} DirectXTex)
target_include_directories(${PROJECT_NAME} PRIVATE ../DirectXTex/DirectXTex)
请记住,DirectXTex 软件包还包含独立模块(DDSTextureLoader、WICTextureLoader 和 ScreenGrab),如果您需要基本的运行时加载,这些模块可用于而不使用 DirectXTex无需转换、调整大小、压缩等所需的所有代码。
要使用独立模块,您需要将 header 和 .cpp 文件都添加到您的项目中 - 它们不在 DirectXTex.lib 中。
因此,就您的情况而言,请包括 this directory WICTextureLoader11.h
和 WICTextureLoader11.cpp
来获取 CreateWICTextureFromFile
的 Direct3D 11 版本。您收到链接错误的原因是您没有将 cpp 文件添加到您的项目中。
The DirectX Tool Kit also includes
DDSTextureLoader
,WICTextureLoader
, andScreenGrab
. These versions are integrated in theDirectXTK.lib
. Instead of using DirectXTex at all, you could use that project's CMakeLists.txt and reference it as:
add_subdirectory(${CMAKE_SOURCE_DIR}/../DirectXT ${CMAKE_BINARY_DIR}/bin/CMake/DirectXTK)
target_link_libraries(${PROJECT_NAME} DirectXTK)
target_include_directories(${PROJECT_NAME} PRIVATE ../DirectXTK/Inc)
请参阅WICTextureLoader文档和 this blog post .
关于c++ - 有没有办法在没有 Visual Studio 的情况下使用 DirectXTex?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63326827/