Переход с DirectX 10 на DirectX 11

10

Я выполнил достаточное количество небольших хобби-проектов с использованием DirectX 9, но сейчас пришло время перейти на DirectX 11.

У меня есть книга Фрэнка Луны о 3D-программировании с использованием DirectX 10, но ничего о DirectX 11. Я считаю, что они очень похожи, но мне было интересно, может ли кто-нибудь перечислить основные различия на уровне кода, о которых мне нужно знать ( или указать на существующий источник).

Johnb
источник
Связанные gamedev.stackexchange.com/questions/2362/…
Коммунистическая утка
Я слышал, что DX10 действительно отличался и не имел обратной совместимости с DX9, а DX11 был обратно совместим с DX9.
Jokoon
DX10 довольно сильно отличается от DX9, но DX11 довольно похож на DX10, я просто хотел узнать, в чем были различия. Как ни странно, DX11 будет работать с аппаратным обеспечением DX9, но DX10 не будет;)
JohnB

Ответы:

15

В документации SDK есть раздел о переходе на 11, который охватывает как 9, так и 10. Также есть страница функций D3D11 .

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

Однако, как только вы узнаете об изменении, к нему довольно легко адаптироваться: там, где вы бы в 10 назвали « someDevice->Draw()», вместо этого вы получите непосредственный контекст для устройства и позвоните « immediateContext->Draw()».

Другое большое изменение заключается в том, что API-интерфейс Effects извлечен из ядра и сделан из независимого исходного кода, который вы должны скомпилировать и связать самостоятельно. Вы также можете заметить некоторые интерфейсы и функции D3DX, которые устарели или удалены.

Помимо этого, есть несколько новых параметров для некоторых функций и несколько дополнительных полей в структурах и так далее. Например, объект описания буфера в 11 имеет дополнительное StructureByteStrideполе, которое не в 10 , и создание устройства включает передачу информации об уровне возможностей . Плюс есть очевидные и вышеупомянутые изменения в именах интерфейсов (10 заменены на 11).


источник
Спасибо, как раз то, что мне было нужно. Я искал какое-то официальное руководство по тому, что изменилось, но каким-то образом не смог найти его. Спасибо за этот ответ и другим людям, которые нашли время, чтобы помочь с хорошими ответами :)
JohnB
Забавно, как быстро забывают эти вещи. Я особенно ненавидел компиляцию эффектов, и мне потребовалось несколько дней, чтобы заставить ее работать. Но я не включил его в свой ответ ...
Notabene
Я собирался опубликовать это как вопрос, но понял, что ваш ответ уже охватывает большинство моих проблем, хотя я хотел бы получить некоторое подтверждение. Для того, кто работает только с DX9, но ищет возможности улучшить свои знания, приобретение книги по DX11 не только научит меня DX11 (очевидно), но и даст мне достаточно знаний для работы с DX10, если это необходимо?
Дэвид Гувея
Да, в значительной степени.
1

Я думаю, что главное отличие в том, что в DX11 DXFont больше нет, кроме того, что в значительной степени, как сказал notabene. Вы должны быть в порядке с этой книгой DX10. Я использовал этот при переходе на DX11, и у меня не было проблем. Время от времени вам нужно будет заглядывать в msdn, хотя есть некоторые незначительные отличия в API в некоторых местах IIRC.

dotminic
источник
1

Там не будет необходимости менять. Directx11 только добавляет новые функции. Вы просто измените номера с ID3D10 на ID3D11 и т. Д.


DirectX11 добавляет (если не говорит о раздутом HW сообщении) Direct Compute: API для GPGPU, с отличным подключением к линии графического конвейера (я не могу сказать это о CUDA или openCL). И возможность использования нескольких RW-текстур и буферов в пиксельном шейдере, что открывает множество новых возможностей.

NotaBene
источник