2015-08-13 6 views
0

У меня есть шейдер (в .fx файл), который имеет части, как, что (которые используют SAS):Чтение семантики и аннотации HLSL с помощью API DirectX 11?

cbuffer UpdatePerObject : register(b1) 
{ 
    float4x4 worldViewIT : WorldViewInverseTranspose < string UIWidget = "MyName"; >; 
    float4x4 world : World < string UIWidget = "None"; >; 
}; 

Я использую DirectX 11 и моя программа в C++.

Различные шейдеры потребуют разных матриц, текстур и т. Д. Я хочу установить их в эти шейдеры на основе их семантики & аннотаций.

Я могу сделать это, просто разобрав файл .fx вручную и ищем : ... <...> шаблон. Или, может быть, API DirectX 11 имеет некоторые специальные методы или подход для этого.

Дополнительное чтение всех шейдеров от руки для поиска семантики & аннотации выглядят как немного завышенные.

ответ

1

Эффекты для D3D11 были перенесены из DirectX SDK (теперь Windows SDK) и в проект с открытым исходным кодом, размещенный на GitHub, FX11.

Чтобы получить семантику для шейдера, вы можете использовать API-интерфейс рефлектометра Shader D3D через D3D11Reflect, которые все еще являются частью SDK. Эти API-интерфейсы предназначены только для шейдеров .hlsl и не поддерживают все дополнительные функции инфраструктуры FX.

+0

Итак, без использования сторонних библиотек я больше не могу это делать с DirectX 11 (как я был, например, в DirectX 9)? Мне просто нужно получить семантическое имя для моей матрицы из шейдера (в '.fx' или в .hlsl'). – PolGraphic

+0

Это не совсем сторонняя библиотека, она от Microsoft и основана на поддержке FX, которая использовалась для отправки в составе SDK. Они вытащили большую часть того, что использовалось для создания D3DX, чтобы открыть библиотеки с открытым исходным кодом. Это было сделано отчасти потому, что, когда DirectX SDK переместился в Windows SDK, они были бы ограничены, когда они могли бы выпускать обновления для вспомогательных библиотек. – mattnewport

+2

Если вы хотите получить семантику для файла шейдера (а не для конкретной информации в FX), используйте API-интерфейсы D3DReflect: https://msdn.microsoft.com/en-us/library/windows/desktop/ff728670(v=vs .85) .aspx – mattnewport

Смежные вопросы