Методы используются (в настоящее время устаревшей) системой эффектов.
Она охватывает много API низкого уровня (изначально DirectX9 работал с техниками, поэтому он был создан для облегчения перехода между direct3d9 к direct3d10 / 11 ).
Он предоставляет помощников для управления постоянными буферами и api отражения / переменной для назначения данных шейдерам.
Таким образом, в то время как при низкоуровневом конвейере вы будете компилировать свои вершинные и пиксельные шейдеры независимо, Создайте свои постоянные буферы и структуры, которые go с его помощью позволяют строить все в одном блоке, разбивают постоянные буферы на переменную систему и имеют пароль api, который позволяет выполнять связывание всех в одном go.
У обоих есть свои плюсы и минусы, fx действительно хорош для создания и создания прототипов (например, очень легко использовать их переменную систему для создания автоматов c gui), но так как он управляет множеством шаблонов для вас, но это становится немного неловко, когда дело доходит до эффективного ресурса Повторное использование или сложные перестановки шейдеров.
Одна вещь, которую я особенно упускаю из эффектов, это переменная семантика и аннотации, вы можете установить такие вещи, как:
float2 tex : TARGETSIZE;
и с помощью переменной системы обнаружить, что tex имеет TARGETSIZE semanti c Например, скрытие от пользовательского интерфейса и автоматическое присоединение размера таджета рендера.
Старым распространенным применением аннотаций было предоставление метатады для таких значений, как:
float4 color <bool color=true;> = 1.0f;
Отражение между аннотациями позволяет увидеть, что мы рассматриваем эта переменная как цвет (и отображать палитру цветов в редакторе вместо 4 каналов)
Хотя профиль fx_5_0 устарел в d3dcompiler_47, его все еще можно использовать, а оболочка имеет открытый исходный код: https://github.com/microsoft/FX11