Есть ли причина предпочитать Direct3D OpenGL?

11

Итак, я читал это , у меня как-то появилась причина, по которой игр в Microsoft Windows намного больше, чем в любой другой ОС. Основной проблемой было то, что Direct3D предпочтительнее OpenGL.

Чего я не понимаю, так это зачем любому разработчику жертвовать совместимостью? Это просто финансовый убыток для компании. Я понимаю, что OpenGL - это беспорядок, но это вряд ли должно быть проблемой для экспертов. Даже если это так, я думаю, что люди пойдут на большее, чем понесут финансовые потери.

Также, если я не ошибаюсь, тогда многие кросс-платформенные приложения используют Direct3D и OpenGL. Я думаю, что они переключаются между API.

Это странно, так как они могут просто использовать OpenGL, зачем вообще заботиться о Direct3D?

Таким образом, вопрос заключается в том, есть ли какие-либо технические проблемы с OpenGL или есть ли какая-либо поддержка, которую обеспечивает Direct3D, которой нет в OpenGL?


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

--- B
источник
Вы ищете что-то отличное от этого ?
Трихоплакс
2
Кстати, я ответил на аналогичный вопрос на GameDev.SE пару лет назад.
Натан Рид
1
Вот хороший урок истории, который как бы отвечает на ваш вопрос: programmers.stackexchange.com/questions/60544/…
Дарий
1
@NathanReed «Так что, возможно, мы увидим поворот к многоплатформенным разработчикам, использующим OpenGL в Windows». А теперь, 3 года спустя, вы бы сказали, что это произошло?
Rotem
2
@Rotem Я так не думаю, нет. OGL (а теперь и Vulkan) сегодня лучше поддерживают паритет функций с D3D, чем это было раньше, но AFAICT, производители графических процессоров, все еще отдают предпочтение драйверам D3D для исправлений ошибок и улучшения производительности, и большинство игр / движков по-прежнему используют D3D по умолчанию в Windows. Заметным исключением являются движки idTech , которые все используют OGL в Windows.
Натан Рид

Ответы:

9

По поводу того, что игр для Windows больше, некоторые причины

  1. Windows занимает большую часть рынка, и в прошлом разрабатывать кроссплатформенные игры было сложнее, чем сегодня.
  2. DirectX поставляется с лучшими инструментами для разработки (например, отладка)
  3. Большие инновации обычно сначала создаются / внедряются в DirectX, а затем переносятся в / реализуются в OpenGL.
  4. Что касается Windows против Linux, вы должны учитывать, что когда существует фактический стандарт по маркетинговым и историческим причинам (см., Почему разработчики игр предпочитают Windows? | Software Engineering , как я уже говорил в комментариях), он имеет свою инерцию. ,

Инерция очень важна. Если ваша команда разрабатывает для DirectX, ориентируясь на 90% рынка (ну ... если вы играете в игры на ПК, у вас, вероятно, есть окна, так что ... 99% рынка?), Зачем вам инвестировать в OpenGL? Если вы уже разрабатываете в OpenGL, снова ориентируясь на 99% рынка, вы будете придерживаться этого так долго, как сможете. Например, Id Tech от Id Software - отличный игровой движок (для серии DOOM), использующий OpenGL.

О теме вашего обсуждения, комментарий.

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

  • На большинстве мобильных платформ вы должны использовать OpenGl ES.
  • На ПК вы можете использовать как DirectX, так и OpenGL
  • Я думаю, что на XBOX вы должны использовать DirectX.
  • Я думаю, что на PS вы используете собственный API.
  • На старом оборудовании вы используете DirectX9 или OpenGL 3, или OpenGL ES 2.
  • С более новым оборудованием вы можете (и хотите) использовать DirectX 11, OpenGL 4, OpenGL ES 3.

В последнее время, с появлением новых API с низким уровнем издержек, что является важным поворотным моментом для графического программирования, появились DirectX 12 для Windows и XBOX, Metal для iOS и Vulkan (новый OpenGL) для Windows и Linux (включая Android и Tizen). ).

Есть еще игры, ориентированные только на Windows и XBOX, но, на мой взгляд, сегодня это может быть только маркетинговый выбор.

Дарий
источник
Таким образом, нет никаких причин производительности, чтобы предпочесть Direct3D?
A --- B
@ritwik sinha DirectX 11 лучше поддерживает многопоточное рендеринг, чем OpenGL 4, но, насколько мне известно, это не привело к реальной разнице в производительности. С другой стороны, сравнивая Windows с DirectX 11 и Linux с OpenGL 4, победителем стал Linux с OpenGL. Что касается DirectX 12 против Vulkan, я думаю, что еще слишком рано об этом знать, но я не знаю.
Дарий
Я никогда не работал с Direct3D, поэтому я не понимаю, что вы подразумеваете под многопоточностью. Насколько я знаю, разные потоки обрабатываются программистами для разных задач. Direct3D делает это под капотом? В любом случае, хороший ответ.
A --- B
1
@ritwik sinha Применение многопоточности для графики в реальном времени заключается в том, что вы можете использовать разные потоки для выделения ресурсов на заднем плане (потоковая передача текстуры, буферы вершин), пока основной поток выполняет вызовы отрисовки. Это также возможно в OpenGL, но очень и очень сложно. В DirectX 11 вы также можете делать вызовы отрисовки из многих потоков, что должно повысить производительность, но это не обычная практика. Я думаю, что последний релиз UnrealEngine4 делает это. Тем не менее, с DirectX 12 и Vulkan многопоточность рендеринга станет реальной сделкой.
Дарий
1

Пара возможных причин:

  • Исторически качество драйверов OpenGL сильно различалось, но я не уверен, что это так.
  • Xbox поддерживает D3D, поэтому переносить игру между ним и ПК стало проще.
  • Инструменты отладки для D3D были лучше, чем для OpenGL. К счастью, теперь у нас есть RenderDoc
SurvivalMachine
источник