Файлы эффектов Direct3D 11 устарели? - PullRequest
18 голосов
/ 28 февраля 2010

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

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

Ответы [ 5 ]

5 голосов
/ 21 августа 2010

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

4 голосов
/ 05 марта 2010

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

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

3 голосов
/ 09 июля 2014

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

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

Большая часть примеров DirectX SDK и всех образцов Магазина Windows избегает использования Effects 11. Я опубликовал несколько примеров Win32 для настольных компьютеров, которые используют его для GitHub .

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

1 голос
/ 06 июля 2012

В качестве примера в DirectX SDK предоставляется среда выполнения эффекта, которая должна помочь вам использовать файлы .fx. Проверьте каталог:% DXSDK_DIR% \ Samples \ C ++ \ Effects11

0 голосов
/ 03 апреля 2010

http://msdn.microsoft.com/en-us/library/ff476261(v=VS.85).aspx

Это говорит о том, что может потребоваться шейдер или эффект.

http://msdn.microsoft.com/en-us/library/ff476190(v=VS.85).aspx

Кроме того, в чем разница между шейдером и эффектом?

...