c++ - 有没有办法在没有 Visual Studio 的情况下使用 DirectXTex?

标签 c++ directx directx-11

到目前为止,我尝试使用 DirectX 11 项目来加载纹理:

我下载了 DirectXTex 源代码,将源文件包含到我的项目中并尝试编译,但出现错误。我从这些头文件中收到错误:WICTextureLoader.hDDSTextureLoader.hDirectXTex.h。这些错误来自头文件,而不是我自己的代码。然后,我尝试了 WICTextureLoader11.hDDSTextureLoader11.h,我得到的错误是 对函数 CreateWICTextureFromFile() 的 undefined reference ...(或相同,但使用 DDS)。

我想,这里的问题可能是编译器(我使用Clang/GCC)找不到.lib文件?然而,这里有些人提到,你可以将源文件放入你的文件夹中,一切就OK了。看来,这对我来说不太好。如果这是问题所在,是否有一种方法可以获取二进制文件(.lib),而无需通过 VS 安装和其他操作?

最佳答案

DirectXTex 库可以使用 clang/LLVM for Windows 或 Visual C++ 构建。该项目包括 CMakeLists.txt用于使用 CMake 构建 DirectXTex 库以及可选的命令行工具。如果您有自己的 make 解决方案,则可以通过引用该文件来计算出详细信息。

要使用 DirectXTex 库函数(也称为 LoadWICFromFileCompress 等),您需要链接到 DirectXTex 库,您可以在 CMake 中通过 add_subdirectorytarget_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.hWICTextureLoader11.cpp 来获取 CreateWICTextureFromFile 的 Direct3D 11 版本。您收到链接错误的原因是您没有将 cpp 文件添加到您的项目中。

The DirectX Tool Kit also includes DDSTextureLoader, WICTextureLoader, and ScreenGrab. These versions are integrated in the DirectXTK.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/

相关文章:

c++ - 删除数据文件中的条目 C++

c++ - 什么是最好的 "type renaming"方法?

c++ - 使用Direct 3D时,代码中应该处理什么,HLSL中应该处理什么?

c++ - D3DX11CompileFromFile 返回 S_OK 但 CreateVertexShader 抛出错误

c++ - 在 DirectX11 中为动态和静态对象使用单独的顶点缓冲区

c# - SharpDx 窗口调整大小

c++ - 异步的令人费解的行为

c++ - 将多维数组(最初未定义其维度)传递给 C++ 中的函数

c# - (C/C++/C#) DirectX 9 Overlay,最好使用与 xfire 或 Steam 相同的方式

c++ - DirectX 11.2 错误 : X3501: 'main' entry point not found