Чи є якась причина віддавати перевагу Direct3D перед OpenGL?


11

Тому я читав це , я начебто отримав причину того, що на вікнах Microsoft набагато більше ігор, ніж на будь-якій іншій ОС. Основна проблема, що була представлена, полягала в тому, що Direct3D віддається перевазі OpenGL.

Що я не розумію, це чому будь-який розробник пожертвує сумісністю? Це просто фінансові збитки для компанії. Я розумію, що OpenGL - це якась безлад, але це навряд чи має бути проблемою для експертів. Навіть якщо це так, я думаю, що люди пройдуть додаткову милю, ніж понести фінансові втрати.

Крім того, якщо я не помиляюся, то багато кросплатформних додатків використовують як Direct3D, так і OpenGL. Я думаю, що вони перемикаються між API.

Це дивно, оскільки вони можуть просто використовувати OpenGL, чому навіть піклуватися про Direct3D?

Отже, питання полягає в тому, чи є якісь технічні проблеми з OpenGL чи є підтримка, яку надає Direct3D, якої не вистачає OpenGL?


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


Ви шукаєте щось інше від цього ?
трихоплакс

2
До речі, я відповів на подібне запитання на GameDev.SE пару років тому.
Натан Рід

1
ось хороший урок історії, який сортує відповідь на ваше запитання: programmers.stackexchange.com/questions/60544/…
darius

1
@NathanReed "Отже, можливо, ми побачимо поворот назад у напрямку до розробників багатьох платформ, що використовують OpenGL для Windows." А тепер, через 3 роки, ви б сказали, що це сталося?
Ротем

2
@Rotem Я так не думаю, ні. OGL (і тепер Вулкан) сьогодні краще підтримувати паритет функцій з D3D, ніж це було, але AFAICT, постачальники GPU все ще надають пріоритет драйверам D3D для виправлень та покращень perf, а більшість ігор / двигунів досі використовують D3D за замовчуванням у Windows. Помітним винятком є двигуни idTech , які всі використовують OGL в Windows.
Натан Рід

Відповіді:


9

Про те, що для Windows більше ігор, є деякі причини

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

Інертність дуже важлива. Якщо ваша команда розробляє для DirectX, орієнтуючись на 90% ринку (ну ... якщо ви граєте в ігри на ПК, у вас, можливо, є вікна, так що ... 99% ринку?), Чому б ви хотіли інвестувати в OpenGL? Якщо ви вже розвиваєтеся в OpenGL, знову орієнтуючись на 99% ринку, ви будете дотримуватися цього, поки зможете. Для іспиту Id Id від Id Software - це відмінний ігровий движок (живлення серії DOOM), який використовує OpenGL.

Про тему вашої дискусії, коментар.

На сьогоднішній день існує безліч API, і загальною практикою є використання Game Engine, що резюмує над ними. Наприклад, врахуйте це

  • На більшості мобільних платформ вам доведеться використовувати 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, але на сьогоднішній день IMHO може бути лише маркетинговим вибором.


Тож немає причин для продуктивності віддавати перевагу 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.