0

听到关于 Clang 的好消息,我决定给它一个机会,并在我的窗户上安装了 Clang。通过安装,它也集成到了我的 VisualStudo2015 中。一切正常,直到我尝试用 clang 编译一个小型 DirectX11 程序。First Clang 在 DirectX11 的“DirectXMath”-Headers 中遇到了一些问题。DirectX 将 __m128 SIMD 类型视为联合,而 clang 使用浮点数组。我决定删除 clang 头文件,只给编译器 microsoft 头文件。它编译时没有任何警告或错误。
但是当我启动程序时,我只看到一个大小正确且位置正确的黑色纹理。用普通的 VisualStudio-Compiler 重新编译程序可以正确显示纹理,所以我猜我的代码是正确的。

有什么办法可以帮助 Clang 吗?我想在 Windows 下更多地使用 Clang,但我不想改变我的项目想法。

一些信息(可能会有所帮助):
1.)我正在使用带有以下附加命令的 clang-cl:-fms-compatibility -fms-extensions -Qunused-arguments
2.)我正在使用 Windows 8.1 标头
3。 ) 使用 DirectXTK 绘制纹理

4

1 回答 1

0

基本的 SSE 内在语法由 Intel 定义,但平台类型如何__m128实现的细节因编译器而异。听起来问题是我必须V.m128_f32[i];在 DirectXMath 中使用索引的几个地方。如果是这样的话,看起来更新版本的 Clang 应该可以工作V[i]

_XM_NO_INTRINSICS_如果 Clang 不使用 DirectXMath 构建,我怀疑您必须使用定义的预处理器符号构建所有内容。我怀疑 Visual C++ 内在函数头文件能否与 Clang 一起正常工作。

我个人没有尝试过使用 Clang,但是如果我可以做一些事情来改进DirectXMathDirectXTK对 Clang 的使用,请告诉我。我提交了一个问题来跟踪这个特定问题。

也就是说,Windows SDK 头文件不完全兼容 Clang,当然也不在 Windows 8.1 SDK 版本中。

于 2017-02-05T20:54:52.510 回答