Не можете разобраться с шейдерами для DirectX11?

Итак, я понятия не имею, как использовать шейдеры. Кодировать их легко, но не использовать их. MSDN действительно бесполезен для меня, а это означает, что у них есть худшие учебники. В настоящее время я читаю книгу Фрэнка Луны по Direct3d 11 и, наконец, добрался до той части, где я действительно могу рисовать. Увлекательно, за исключением того факта, что оно не работает. Его BoxDemo — я уверен, работал 3 года назад, когда была написана книга, но теперь со всем новым материалом DirectX — без DirectX SDK и теперь с использованием «Windows SDK», FX устарел, больше нет библиотек D3DX... Так разочаровывает. Я пошел дальше и перешел на SDK DirectX 2010 — просто чтобы я действительно мог использовать учебник. Почти в каждом учебнике по D3D используются библиотеки D3DX.

Во всяком случае... теперь к моему вопросу. В Visual Studio есть возможность создавать файлы .hlsl. Но у него также есть возможность создавать файлы .fx (если вы просто наберете .fx в конце имени файла, он создаст файл .fx). Таким образом, я мог бы использовать устаревший способ .fx и легко научиться его использовать со всеми учебными пособиями - ИЛИ я могу изучить новый способ HLSL и провести самое трудное, самое разочаровывающее время, пытаясь чтобы узнать это без учебников.

Я знаю, что они оба используют язык HLSL. Но оба они используются в программе по-разному. (CreateEffectFromMemory, CompileFromFile и т. д.). Я как бы надеюсь научиться новому, но если я этого не сделаю, это нормально. Хотя у меня практически есть целая программа, использующая файл .fx. Я уверен, что это сработает, но мне просто нужна помощь в создании и использовании "Effects11.lib".

Извините за затянувшийся пост - на самом деле, я уверен, что какое-то время не получу ответов - если и получу - из-за длины. Я очень расстроен, потому что изучение DirectX поставило мою карьеру программиста на огромный перерыв на последний месяц, 2 месяца. Пожалуйста и спасибо за любую помощь


person AceDawg45    schedule 05.12.2014    source источник


Ответы (1)


Расширение файла .hlsl против .fx является произвольным. Это как разница между .cpp и cxx. Исторически сложилось так, что .fx используется для шейдеров HLSL, которые включают вершинные шейдеры, пиксельные шейдеры и приемы/проходы эффектов (FX), а .hlsl — это файл, который не включает приемы/проходы эффектов (FX), а является просто соглашением. Там много того и другого.

Важно то, как файл скомпилирован. Если вы используете fx_5_0, то для их фактического использования требуется среда выполнения Effects 11. Это само по себе ничего особенного. Он фактически просто вызывает один и тот же компилятор для каждой комбинации операторов compile, которые вы предоставили для методов/пассов эффектов (FX), и связывает их с некоторыми метаданными. На самом деле, вы часто можете вызвать компилятор FXC для файла .fx, содержащего методы/и передачи, используя что-то вроде vs_5_0 или ps_4_0, и он скомпилирует соответствующий шейдер для конкретной стадии, если вы правильно подберете параметры.

RE: Эффекты 11

Основная проблема с Effects 11 заключается в том, что ему требуется D3DCompile DLL во время выполнения, потому что он использует его для извлечения метаданных, необходимых для подключения состояния и шейдеров. Эту DLL-библиотеку D3DCompile нельзя использовать с приложениями Магазина Windows в Windows 8.0 и Windows phone 8.0, когда вы фактически развернули приложение, только когда вы разрабатывали приложение. Таким образом, Effects 11 нельзя было использовать на этих платформах.

Это больше не является технической проблемой для приложений Магазина Windows для Windows 8.1 или Windows phone 8.1, но поддержка компилятором fx_5_0 по-прежнему не рекомендуется. В нем есть несколько проблем, которые исправлены для других профилей vs_5_0 и т. д. Таким образом, вам решать, хотите ли вы использовать его или нет, пока вы понимаете его ограничения.

Последняя версия Effects 11 находится на CodePlex, и я устраняю там ограничения. Есть несколько простых учебников, в которых он используется, а также несколько примеры. Эта версия Effects 11 вообще не нуждается в устаревшем DirectX SDK.

Короче говоря, YMMV w.r.t. до Effects 11, но вы по-прежнему можете использовать его для настольных приложений Win32, приложений Магазина Windows для Windows 8.1, приложений Windows phone 8.1 и, теоретически, также с приложениями Xbox One.

RE: D3DX

Я могу понять разочарование, но это обычная проблема для издательской индустрии и технических книг, которые сильно отстают в плане изменений. DirectX 11 был представлен еще в 2008 году. Переход на Windows 8 SDK произошел в 2012 году, и большинство разработчиков, не говоря уже о издателях книг, пропустили его. У меня есть некоторые заметки об этой книге в моем блоге< /а>.

Полный список «современных» альтернатив см. на странице Жить без D3DX.

Для настольных приложений Win32 вы можете продолжать использовать устаревший DirectX SDK. Важно отметить, что в Windows 8.x SDK, который поставляется с VS 2012 и VS 2013, порядок путей include и lib обратен, чем в VS 2010. См. MSDN для получения подробной информации.

RE: Изучение Direct3D 11

Вы ознакомились с набором инструментов DirectX?

Приступая к работе с Direct3D 11

Уровни возможностей Direct3D

HLSL, FXC и D3DCompile< /а>

Что касается руководств и примеров, попробуйте Каталог примеров DirectX SDK.

person Chuck Walbourn    schedule 06.12.2014
comment
Спасибо за обстоятельный ответ! Действительно прояснил кое-что между FX и hlsl. И этот список, вероятно, пригодится — может быть, когда я перейду на Window 10 в следующем году. Наконец, у меня снова и снова возникают многочисленные проблемы с DirectX. Я не сдаюсь, нет. Наверняка нет. Это просто создает для меня гораздо более серьезную проблему. Я понимаю, что делает что и все такое, но код — это то, что меня привлекает. Еще раз спасибо за пост! - person AceDawg45; 06.12.2014