Услышав о Clang, я решил дать ему шанс и установил Clang на свои окна. С установкой он интегрировался и в мой VisualStudo2015. Все работало нормально, пока я не попытался скомпилировать небольшую программу DirectX11 с помощью clang.
Сначала у Clang возникли проблемы с заголовками DirectXMath — DirectX11. В то время как DirectX рассматривал SIMD-тип __m128 как объединение, clang использовал массив с плавающей точкой. Я решил удалить заголовки Clang и дал компилятору только заголовки Microsoft. Он скомпилирован без каких-либо предупреждений или ошибок.
Но когда я запустил программу, я просто увидел черную текстуру с правильным размером и в правильном положении. Перекомпиляция программы с помощью обычного VisualStudio-Compiler разрешена при правильном отображении текстуры, поэтому я думаю, что мой код правильный.
Может ли быть какой-нибудь способ помочь Clang? Я хочу больше работать с Clang под Windows, но я не хочу менять идею своего проекта.
Некоторые сведения (которые могут помочь):
1.) Я использую clang-cl со следующими дополнительными командами: -fms-compatibility -fms-extensions -Qunused-arguments
2.) Я использую заголовки Windows 8.1
3.) Рисование текстуры осуществляется с помощью DirectXTK.
Базовый синтаксис встроенных функций SSE определен Intel, но специфика того, как типы платформ __m128
Реализация варьируется от компилятора к компилятору. Похоже, проблема в нескольких местах, где я должен использовать V.m128_f32[i];
индексирование в DirectXMath. Похоже, что более новая версия Clang должна работать, если это V[i]
,
Я подозреваю, что вам придется строить все с символом препроцессора _XM_NO_INTRINSICS_
определяется, если Clang не будет собираться с DirectXMath. Я сомневаюсь, что встроенные заголовки Visual C ++ будут правильно работать с Clang.
Я лично не пытался работать с Clang, но если есть вещи, которые я могу сделать, чтобы улучшить DirectXMath или же DirectXTK Использование с Clang, дайте мне знать. Я подал вопрос отслеживать эту конкретную проблему.
Тем не менее, заголовки Windows SDK не полностью совместимы с Clang и, конечно, не в версии Windows 8.1 SDK.
Других решений пока нет …