Планирование переноса приложений на 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 непрерываемых операций (Interlocked), могут продолжать использовать их в DirectX 11 и UWP.

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

Есть две концепции, которые придется использовать часто.

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