听到Clang的好话,我决定给它一个机会并在我的窗户上安装Clang。随着安装它也集成到我的VisualStudo2015。一切都运行正常,直到我尝试用clang编译一个小的DirectX11程序。
First Clang在DirectX11的“DirectXMath” - Header中遇到了一些问题。当DirectX将__m128 SIMD类型视为联合时,clang使用了一个float数组。我决定删除clang标头并仅给编译器提供了microsoft标头。它编译时没有任何警告或错误。
但是当我开始编程时,我只看到了一个黑色纹理,其大小和位置正确。使用正常的VisualStudio-Compiler重新编译程序,正确显示纹理,所以我猜我的代码是正确的。
有没有办法帮助Clang?我想在Windows下与Clang一起工作,但我不想改变我的项目想法。
一些信息(可能会有所帮助):
1.)我正在使用clang-cl以及以下附加命令:-fms-compatibility -fms-extensions -Qunused-arguments
2.)我正在使用Windows 8.1标题
3.)使用DirectXTK
答案 0 :(得分:0)
基本的SSE内在函数语法由英特尔定义,但实现平台类型__m128
的具体方式因编译器而异。听起来问题是我必须在DirectXMath中使用V.m128_f32[i];
索引的几个地方。如果这是V[i]
,那么看起来新版本的Clang应该可以工作。
如果Clang不使用DirectXMath构建,我怀疑你必须使用预定义符号_XM_NO_INTRINSICS_
构建所有内容。我怀疑Visual C ++内在函数头与Clang一起正常工作。
我并没有亲自尝试与Clang合作,但如果我能做些什么来改善Clang的使用DirectXMath或DirectXTK,请告诉我。我提交了issue来跟踪这个特殊问题。
也就是说,Windows SDK标头不完全兼容Clang,当然也不是Windows 8.1 SDK版本。