Подтвердить что ты не робот

Файлы эффектов Direct3D 11 устарели?

Я немного поиграл с Direct3D 11 в последнее время и разочарован отсутствием документации по основам API (например, простой геометрический рендеринг). Одной из проблем путаницы, вызванной разреженной документацией, является (очевидное) отступление от использования эффектов для шейдеров.

В D3D11 вся поддержка эффекта (.fx) была удалена из библиотек D3DX и зарыта в труднодоступную (частично документированную, конечно) общую исходную библиотеку. Ни один из включенных примеров не использует его, предпочитая вместо этого напрямую компилировать файлы HLSL. Все это говорит мне, что Microsoft пытается заставить людей перестать использовать формат файла эффектов. Это правда? Есть ли какие-либо документы, подтверждающие это? Я прекрасно это делаю в любом случае, но уже много лет они продвигают формат .fx, поэтому кажется странным, что они вдруг решат отказаться от него.

4b9b3361

Ответ 1

Я нахожусь в том же положении, и после того, как Googling как сумасшедший даже для простейшего образца, который использует D3DX11CreateEffectFromMemory, я тоже пришел к выводу, что поддержка файла .fx не является их самым высоким приоритетом. Хотя странно, что они добавили концепцию EffectGroup, которая является новой для 11, если они не хотят, чтобы мы ее использовали.

Я немного поработал с новым API отражения, поэтому похоже, что будет довольно легко взломать ваши собственные функции для установки переменных и т.д., в сущности создав свой собственный класс эффектов, и следующий шаг будет чтобы увидеть, какую поддержку они оказывают для создания блоков состояния отображения через API. Возможность редактировать те, которые находятся непосредственно в файле .fx, была очень приятной, поэтому, надеюсь, что-то вроде этого все еще существует (или, в худшем случае, я могу разорвать эту часть из кода Effect11).

Ответ 2

Основная проблема заключается в том, что профиль fx_5_0, необходимый для компиляции шейдеров Effects 11 с необходимыми метаданными, устарел командой компилятора HLSL. Время выполнения shared-source, но компилятор не работает. В последнем D3DCompiler (# 47) он выдает предупреждение об этом. fx_5_0 никогда не обновлялся для некоторых новых аспектов языка в DirectX 11.1 и 11.2, но работает "как есть" для Direct3D 11.

Вторая проблема заключается в том, что во время исполнения вам нужны API-интерфейсы D3DCompile, чтобы использовать эффекты 11. Поскольку D3DCompile был "только для разработки" для приложений Windows Store для Windows 8.0 и Windows Phone 8.0, это был не вариант. Технически возможно использовать Effects 11 сегодня с приложениями Windows Store для Windows 8.1 и Windows phone 8.1, поскольку D3DCompile # 47 является частью ОС и включает в себя поддержку компилятора "устаревшая/как-есть" для fx_5_0, но это использование не рекомендуется.

Основная часть образцов DirectX SDK и всех образцов Windows Store позволяет избежать использования эффектов 11. Я опубликовал несколько образцов рабочего стола Win32, которые используют его для GitHub.

Короче говоря, да, вам не рекомендуется использовать его, но вы все еще можете в данный момент, если сможете жить с отказами.

Ответ 3

Многие профессиональные разработчики игр и графики не используют интерфейсы эффектов в Direct3D, и многие из ведущих игровых движков также не используют их. Вместо этого пользовательские подсистемы материалов и эффектов строятся поверх нижних уровней шейдерных и графических состояний. Это позволяет разработчикам делать что-то вроде Direct3D и OpenGL через общий конвейер управления активами.

Ответ 4

В пакете DirectX SDK присутствует эффект runtime, который должен помочь вам использовать файлы .fx. Проверьте каталог:% DXSDK_DIR%\Образцы\С++\Эффекты11