Приложения, которые поддерживают DirectX 9 и 10 - PullRequest
3 голосов
/ 15 сентября 2008

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 15 сентября 2008

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

2 голосов
/ 16 сентября 2008

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

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

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

1 голос
/ 15 сентября 2008

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

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

...