Поделиться через


Планирование порта DirectX

Сводка

Запланируйте проект переноса игр с DirectX 9 на DirectX 11 и универсальная платформа Windows (UWP): обновите графический код и поместите игру в среду среда выполнения Windows.

Планирование переноса графического кода

Прежде чем начать перенос игры в UWP, важно убедиться, что у вашей игры нет отладок от Direct3D 8. Убедитесь, что у вашей игры нет остатков конвейера фиксированной функции. Полный список устаревших функций, включая фиксированные функции конвейера, см. в разделе "Устаревшие функции".

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

Необходимо заменить вспомогательные библиотеки D3DX и DXUT собственными вспомогательными библиотеками или средствами сообщества. Дополнительные сведения см. в разделе "Сопоставление функций".

Примечание. Вы можете использовать набор инструментов DirectX или DirectXTex для замены некоторых функций, которые ранее предоставлялись D3DX и DXUT.

 

Шейдеры, написанные на языке сборки, должны быть обновлены до HLSL с помощью модели шейдера 4 уровня 9_1 или 9_3, а шейдеры, написанные для библиотеки эффектов, необходимо обновить до более последней версии синтаксиса HLSL. Дополнительные сведения см. в разделе "Сопоставление функций".

Ознакомьтесь с различными уровнями функций Direct3D. Уровни компонентов классифицируют широкий спектр видео аппаратного обеспечения путем определения наборов известных функциональных возможностей. Каждый набор примерно соответствует версиям Direct3D от 9.1 до 11.2. Все уровни функций используют API DirectX 11.

Планирование переноса кода пользовательского интерфейса Win32 в CoreWindow

Приложения UWP выполняются в окне, созданном для контейнера приложений, который называется CoreWindow. Игра управляет окном, наследуя от IFrameworkView, что требует меньше сведений о реализации, чем в окне рабочего стола. Основной цикл игры будет находиться в методе IFrameworkView::Run .

Жизненный цикл приложения UWP отличается от классического приложения. Вам придется часто сохранять игру, так как когда событие приостановки происходит только в течение ограниченного времени, чтобы остановить выполнение кода, и вы хотите убедиться, что игрок может вернуться к месту, где они были сразу после возобновления приложения. Игры должны сохраняться достаточно часто, чтобы поддерживать непрерывный игровой опыт от возобновления, но не так часто, что игра экономит влияние кадра или вызывает игру заикание. Ваша игра, возможно, потребуется загрузить состояние игры, когда игра возобновляется из завершенного состояния.

DirectXMath можно использовать в качестве замены для D3DXMath и XNAMath, и он может пригодиться, если вам нужна математическая библиотека. DirectXMath имеет быстрые, переносимые типы данных и типы, которые выровнены и упакованы для использования с шейдерами.

Собственные библиотеки, такие как API interlocked, были расширены для поддержки встроенных функций Arm. Если в игре используются межблокированные API, их можно использовать в DirectX 11 и UWP.

Наши шаблоны и примеры кода используют новые функции C++, с которыми вы еще не знакомы. Например, асинхронные методы используются с лямбда-выражениями для загрузки ресурсов Direct3D без блокировки потока пользовательского интерфейса.

Существует два понятия, которые часто используются:

  • Управляемые ссылки (оператор^) и управляемые классы (классы ссылок) являются основной частью среда выполнения Windows. Для интерфейса с компонентами среда выполнения Windows необходимо использовать управляемые классы ссылок, например IFrameworkView (дополнительные сведения об этом в пошаговом руководстве).
  • При работе с интерфейсами COM Direct3D 11 используйте тип шаблона Microsoft::WRL::ComPtr , чтобы упростить использование указателей COM.