Вопрос

У меня нубский вопрос к любому графическому программисту.

Я не понимаю, как некоторые игры (например, Crysis) могут поддерживать DirectX 9 (в XP) и 10 (в Vista)?

На данный момент я понимаю, что если вы пишете приложение DX10, оно может работать только в Vista.

Может быть, у них есть две базы кода: одна написана на DX9, а другая на DX10?Но не является ли это перебором?

Это было полезно?

Решение

У них есть два конвейера рендеринга: один использует вызовы DX9, а другой — вызовы DX10.API-интерфейсы несовместимы, хотя большую часть любого игрового движка можно повторно использовать для обоих.Если вам нужны примеры с открытым исходным кодом того, как выполняются различные конвейеры рендеринга, посмотрите на что-нибудь вроде Ogre3d, который поддерживает рендеринг OpenGL, DX9 и (скоро) DX10.

Другие советы

Уровень рендеринга в играх обычно представляет собой довольно хорошо изолированную/абстрактную часть всего приложения.Что касается игрового движка, то в каждом кадре вы просто создаете список концептуальных объектов (деревьев, персонажей и т. д.).Если игровой движок решает визуализировать конкретный объект, то уровень рендеринга должен решить, как на самом деле преобразовать это намерение в вызовы отрисовки DX.Рендеринг DX10 будет генерировать другой набор вызовов отрисовки для слоя DX9, но концептуально они по-прежнему выполняют одно и то же действие — «рендеринг этого дерева».

Рендеринг хорошо абстрагирован, потому что вы редко хотите получить какую-либо информацию обратно со слоя рендеринга: как только будет выполнено действие «рендеринг этого дерева», игровой движок просто предположит, что рендеринг выглядит правильно.Нет особой необходимости обрабатывать различные потенциальные результаты вызовов рендеринга DX9/DX10, поскольку 99,9% информации передается от движка к графической системе, а возвращаемые 0,1%, вероятно, принимают одинаковую форму между двумя API.

Настройка приложения немного сложнее, потому что вам нужно спросить систему, поддерживается ли DX10, и в противном случае корректно перейти на DX9, но это стандартная процедура настройки приложения (точно так же, как игра должна выберите разрешение, частоту обновления, устройство ввода и т. д.).

Вполне вероятно, что у них есть уровень абстракции, и они развиваются против него.Во время выполнения они создают экземпляры конкретных двигателей DX9 или DX10.

Я полагаю, что их абстракция расположена очень близко к уровню DirectX и просто обеспечивает DX9 разумную ручную реализацию функций DX10 или улучшает логику DX9 при работе на DX10.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top