Czy jest jakiś powód, aby preferować Direct3D zamiast OpenGL?

11

Czytałem to , więc mam pewien powód, dla którego w Microsoft Windows jest o wiele więcej gier niż w jakimkolwiek innym systemie operacyjnym. Głównym przedstawionym zagadnieniem było to, że Direct3D jest lepszy od OpenGL.

Nie rozumiem, dlaczego deweloper poświęciłby kompatybilność? To po prostu strata finansowa dla firmy. Rozumiem, że OpenGL jest rodzajem bałaganu, ale dla ekspertów nie powinno to stanowić problemu. Nawet jeśli tak jest, myślę, że ludzie poszliby o krok dalej niż ponieść stratę finansową.

Ponadto, jeśli się nie mylę, wiele aplikacji wieloplatformowych korzysta zarówno z Direct3D, jak i OpenGL. Myślę, że przełączają się między interfejsami API.

To dziwne, ponieważ mogą po prostu korzystać z OpenGL, po co w ogóle dbać o Direct3D?

Pytanie brzmi: czy są jakieś problemy techniczne z OpenGL, czy też jest wsparcie, którego zapewnia Direct3D, którego brakuje w OpenGL?


Wiem, że to pytanie może być zamknięte lub nie na temat, starałem się je zawęzić.

A --- B
źródło
Szukasz czegoś innego od tego ?
trichoplax
2
BTW, kilka lat temu odpowiedziałem na podobne pytanie na GameDev.SE .
Nathan Reed
1
oto dobra lekcja historii, która w pewnym sensie odpowiada na twoje pytanie: programmers.stackexchange.com/questions/60544/…
darius
1
@NathanReed „Możliwe jest, że nastąpi powrót do programistów korzystających z wielu platform korzystających z OpenGL w systemie Windows”. A teraz, 3 lata później, czy powiedziałbyś, że tak się stało?
Rotem,
2
@Rotem Nie sądzę, nie. OGL (a teraz Vulkan) jest dziś lepszy w utrzymywaniu parytetu funkcji niż w D3D, ale AFAICT, dostawcy GPU nadal priorytetowo traktują sterowniki D3D pod kątem poprawek błędów i udoskonaleń, a większość gier / silników nadal domyślnie używa D3D w systemie Windows. Godnym uwagi wyjątkiem są silniki idTech , które wszystkie używają OGL w systemie Windows.
Nathan Reed

Odpowiedzi:

9

O tym, że jest więcej gier dla systemu Windows, kilka przyczyn

  1. Windows ma większość rynku, a w przeszłości tworzenie gier międzyplatformowych było bardziej skomplikowane niż obecnie.
  2. DirectX zawiera znacznie lepsze narzędzia do programowania (np. Debugowanie)
  3. Duże innowacje są generalnie najpierw tworzone / implementowane w DirectX, a następnie przenoszone do / implementowane w OpenGL.
  4. Jeśli chodzi o system Windows vs Linux, należy wziąć pod uwagę fakt, że kiedy istnieje rzeczywisty standard z powodów marketingowych i historycznych (zobacz, dlaczego twórcy gier wolą system Windows? | Inżynieria oprogramowania , jak powiedziałem w komentarzach), ma on swoją bezwładność .

Bezwładność jest bardzo ważna. Jeśli Twój zespół opracowuje dla DirectX, celując w 90% rynku (cóż ... jeśli grasz w gry na PC, prawdopodobnie masz okna, więc ... 99% rynku?), Dlaczego chcesz zainwestować w OpenGL? Jeśli już rozwijasz się w OpenGL, ponownie kierując reklamy na 99% rynku, będziesz go trzymać tak długo, jak to możliwe. Na przykład Id Tech firmy Id Software to doskonały silnik gry (zasilający serię DOOM), który wykorzystuje OpenGL.

O temacie dyskusji komentarz.

Na dzień dzisiejszy istnieje wiele interfejsów API, a powszechną praktyką jest używanie silnika gry, który jest nad nimi abstrakcyjny. Rozważ to na przykład

  • Na większości platform mobilnych musisz używać OpenGl ES.
  • Na PC można używać zarówno DirectX, jak i OpenGL
  • Myślę, że na XBOX musisz użyć DirectX.
  • Myślę, że na PS używasz własnego API.
  • Na starym sprzęcie korzystasz z DirectX9 lub OpenGL 3 lub OpenGL ES 2.
  • Z nowszym sprzętem możesz (i chcesz) używać DirectX 11, OpenGL 4, OpenGL ES 3.

Ostatnio, wraz z pojawieniem się nowych interfejsów API o niskim obciążeniu - który jest głównym punktem zwrotnym w programowaniu graficznym - istnieją DirectX 12 dla Windows i XBOX, Metal dla iOS i Vulkan (nowy OpenGL) dla Windows i Linux (w tym Android i Tizen ).

Nadal istnieją gry skierowane tylko na systemy Windows i XBOX, ale dzisiaj IMHO może być tylko wyborem marketingowym.

dariusz
źródło
Więc nie ma powodów, by preferować Direct3D?
A --- B
@ritwik sinha DirectX 11 ma lepszą obsługę renderowania wielowątkowego niż OpenGL 4, ale o ile wiem, nie spowodowało to żadnej różnicy w wydajności. Z drugiej strony, porównując Windows z DirectX 11 i Linux z OpenGL 4, zwycięzcą został Linux z OpenGL. Jeśli chodzi o DirectX 12 vs Vulkan, myślę, że jest za wcześnie, aby wiedzieć, ale nie wiem.
Darius
nigdy nie pracowałem z Direct3D, więc nie rozumiem, co masz na myśli przez wielowątkowość. O ile wiem, programiści zajmują się różnymi wątkami dla różnych zadań. Czy Direct3D robi to pod maską? W każdym razie miła odpowiedź.
A --- B
1
@ritwik sinha zastosowanie wielowątkowości do grafiki w czasie rzeczywistym polega na tym, że możesz używać różnych wątków do przydzielania resoruces w tle (strumieniowanie tekstur, bufory wierzchołków), a wątek główny wykonuje wywołania rysunkowe. Jest to również możliwe w OpenGL, ale bardzo trudne. W DirectX 11 możesz także wykonywać wywołania z wielu wątków, co powinno poprawić wydajność, ale nie jest to powszechna praktyka. Myślę, że robi to ostatnia wersja UnrealEngine4. Jednak w przypadku DirectX 12 i Vulkan renderowanie wielowątkowe będzie prawdziwą okazją.
Darius
1

Kilka możliwych powodów:

  • Historycznie jakość sterowników OpenGL bardzo się różniła, ale nie jestem pewien, czy tak jest.
  • Xbox obsługuje D3D, więc przenoszenie gry między nią a komputerem jest łatwiejsze.
  • Narzędzia do debugowania dla D3D są lepsze niż dla OpenGL. Na szczęście mamy teraz RenderDoc
SurvivalMachine
źródło