Я выполнил достаточное количество небольших хобби-проектов с использованием DirectX 9, но сейчас пришло время перейти на DirectX 11.
У меня есть книга Фрэнка Луны о 3D-программировании с использованием DirectX 10, но ничего о DirectX 11. Я считаю, что они очень похожи, но мне было интересно, может ли кто-нибудь перечислить основные различия на уровне кода, о которых мне нужно знать ( или указать на существующий источник).
Ответы:
В документации SDK есть раздел о переходе на 11, который охватывает как 9, так и 10. Также есть страница функций D3D11 .
Одно из самых больших изменений с точки зрения формы API между 10 и 11 заключается в том, что 11 перемещает группу методов из самого устройства в новый интерфейс, называемый контекстом устройства (в
ID3D11DeviceContext
частности), для поддержки новых многопоточных функций.Однако, как только вы узнаете об изменении, к нему довольно легко адаптироваться: там, где вы бы в 10 назвали «
someDevice->Draw()
», вместо этого вы получите непосредственный контекст для устройства и позвоните «immediateContext->Draw()
».Другое большое изменение заключается в том, что API-интерфейс Effects извлечен из ядра и сделан из независимого исходного кода, который вы должны скомпилировать и связать самостоятельно. Вы также можете заметить некоторые интерфейсы и функции D3DX, которые устарели или удалены.
Помимо этого, есть несколько новых параметров для некоторых функций и несколько дополнительных полей в структурах и так далее. Например, объект описания буфера в 11 имеет дополнительное
StructureByteStride
поле, которое не в 10 , и создание устройства включает передачу информации об уровне возможностей . Плюс есть очевидные и вышеупомянутые изменения в именах интерфейсов (10 заменены на 11).источник
Я думаю, что главное отличие в том, что в DX11 DXFont больше нет, кроме того, что в значительной степени, как сказал notabene. Вы должны быть в порядке с этой книгой DX10. Я использовал этот при переходе на DX11, и у меня не было проблем. Время от времени вам нужно будет заглядывать в msdn, хотя есть некоторые незначительные отличия в API в некоторых местах IIRC.
источник
Там не будет необходимости менять. Directx11 только добавляет новые функции. Вы просто измените номера с ID3D10 на ID3D11 и т. Д.
DirectX11 добавляет (если не говорит о раздутом HW сообщении) Direct Compute: API для GPGPU, с отличным подключением к линии графического конвейера (я не могу сказать это о CUDA или openCL). И возможность использования нескольких RW-текстур и буферов в пиксельном шейдере, что открывает множество новых возможностей.
источник