到目前为止,我尝试使用DirectX 11项目执行此操作以加载纹理:
我下载了DirectXTex源代码,将源文件包含到我的项目中并尝试进行编译,但出现错误。我从这些头文件中收到错误:WICTextureLoader.h
,DDSTextureLoader.h
和DirectXTex.h
。错误来自头文件,而不是我自己的代码。然后,我尝试了WICTextureLoader11.h
和DDSTextureLoader11.h
,而我得到的错误是undefined reference to the function CreateWICTextureFromFile()...
(或相同,但带有DDS)。
我认为,这里的问题可能是编译器(我使用Clang / GCC)找不到.lib
文件?但是,这里有些人提到您可以将源文件放入文件夹中,一切都会好起来的。好像对我来说不好。如果这是问题所在,有没有办法在不进行VS安装和其他操作的情况下获取二进制文件(.lib
)?
最佳答案
DirectXTex库可以使用Windows或Visual C++的clang / LLVM构建。该项目包括一个使用CMake构建DirectXTex库的CMakeLists.txt,以及可选的命令行工具。如果您有自己的品牌解决方案,则可以通过引用该文件来制定详细信息。
要使用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文件添加到项目中。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。