Y a-t-il une raison de préférer Direct3D à OpenGL?

11

Donc je lisais ceci , j'ai en quelque sorte la raison pour laquelle il y a beaucoup plus de jeux sur Microsoft Windows que sur n'importe quel autre OS. Le principal problème présenté était que Direct3D est préféré à OpenGL.

Ce que je ne comprends pas, c'est pourquoi un développeur sacrifierait-il la compatibilité? Il s'agit simplement d'une perte financière pour l'entreprise. Je comprends qu'OpenGL est une sorte de gâchis, mais cela ne devrait guère être un problème pour les experts. Même si c'est le cas, je pense que les gens feraient un effort supplémentaire pour subir une perte financière.

De plus, si je ne me trompe pas, de nombreuses applications multiplateformes utilisent à la fois Direct3D et OpenGL. Je pense qu'ils basculent entre les API.

C'est bizarre car ils peuvent simplement utiliser OpenGL, pourquoi même se soucier de Direct3D?

La question est donc la suivante: y a-t-il des problèmes techniques avec OpenGL ou y a-t-il un support fourni par Direct3D qui manque à OpenGL?


Je suis conscient que cette question peut être classée comme hors sujet ou trop large, j'ai fait de mon mieux pour la réduire.

UN B
la source
Vous cherchez quelque chose de différent de ce ?
trichoplax
2
BTW, j'ai répondu à une question similaire sur GameDev.SE il y a quelques années.
Nathan Reed
1
voici une bonne leçon d'histoire qui répond en quelque sorte à votre question: programmers.stackexchange.com/questions/60544/…
darius
1
@NathanReed "Il est donc possible que nous assistions à un retour vers les développeurs multi-plateformes utilisant OpenGL sur Windows." Et maintenant, 3 ans plus tard, diriez-vous que c'est arrivé?
Rotem
2
@Rotem Je ne pense pas, non. Aujourd'hui, OGL (et maintenant Vulkan) est mieux à même de maintenir la parité des fonctionnalités avec D3D, mais AFAICT, les fournisseurs de GPU priorisent toujours les pilotes D3D pour les corrections de bogues et les améliorations de performances, et la plupart des jeux / moteurs utilisent toujours D3D par défaut sous Windows. Une exception notable est les moteurs idTech , qui utilisent tous OGL sur Windows.
Nathan Reed

Réponses:

9

À propos du fait qu'il existe plus de jeux pour Windows, certaines raisons sont

  1. Windows possède la majorité du marché et dans le passé, développer des jeux multiplateformes était plus compliqué qu'aujourd'hui.
  2. DirectX propose de bien meilleurs outils de développement (par exemple, le débogage)
  3. Les grandes innovations sont généralement d'abord créées / implémentées dans DirectX, puis portées / implémentées dans OpenGL.
  4. Quant à Windows vs Linux, vous devez considérer que lorsqu'il existe une norme réelle pour des raisons marketing et historiques (pour cela, voir Pourquoi les développeurs de jeux préfèrent Windows? | Génie logiciel , comme je l'ai dit dans les commentaires), il a son inertie .

La chose d'inertie est très importante. Si votre équipe se développe pour DirectX, ciblant 90% du marché (enfin ... si vous jouez à des jeux sur PC, vous avez probablement des fenêtres, donc ... 99% du marché?), Pourquoi voudriez-vous investir dans OpenGL? Si vous développez déjà en OpenGL, ciblant à nouveau 99% du marché, vous vous en tiendrez aussi longtemps que possible. Par exemple, Id Tech par Id Software est un excellent moteur de jeu (alimentant la série DOOM) qui utilise OpenGL.

À propos du sujet de votre discussion, un commentaire.

À ce jour, il existe de nombreuses API, et une pratique courante consiste à utiliser un moteur de jeu qui les résume. Par exemple, considérez que

  • Sur la plupart des plateformes mobiles, vous devez utiliser OpenGl ES.
  • Sur PC, vous pouvez utiliser à la fois DirectX et OpenGL
  • Je pense que sur XBOX, vous devez utiliser DirectX.
  • Je pense que sur PS, vous utilisez leur propre API.
  • Avec l'ancien matériel, vous utilisez DirectX9 ou OpenGL 3 ou OpenGL ES 2.
  • Avec du matériel plus récent, vous pouvez (et souhaitez) utiliser DirectX 11, OpenGL 4, OpenGL ES 3.

Récemment, avec l'avènement des nouvelles API à faible surcharge - ce qui constitue un tournant majeur pour la programmation graphique - il existe DirectX 12 pour Windows et XBOX, Metal pour iOS et Vulkan (le nouvel OpenGL) pour Windows et Linux (y compris Android et Tizen ).

Il existe encore des jeux qui ne ciblent que Windows et XBOX, mais à mon humble avis aujourd'hui, cela ne peut être qu'un choix marketing.

darius
la source
Il n'y a donc aucune raison de performance pour préférer Direct3D?
A --- B
@ritwik sinha DirectX 11 prend mieux en charge le rendu multi-threading qu'OpenGL 4, mais à ma connaissance, cela n'a entraîné aucune différence de performances réelles. De l'autre côté, en comparant Windows avec DirectX 11 et Linux avec OpenGL 4, le gagnant était Linux avec OpenGL. Concernant DirectX 12 vs Vulkan, je pense qu'il est trop tôt pour le savoir, mais je ne sais pas.
darius
je n'ai jamais travaillé avec Direct3D, donc je ne comprends pas ce que vous entendez par multi-threading. Autant que je sache, différents threads sont gérés par des programmeurs pour différentes tâches. Direct3D fait-il cela sous le capot? Quoi qu'il en soit, belle réponse.
A --- B
1
@ritwik sinha, une application du multi-threading aux graphiques en temps réel est que vous pouvez utiliser différents threads pour allouer des résoruces en arrière-plan (streaming de texture, tampons de vertex), alors qu'un thread principal effectue les appels de dessin. Ceci est également possible dans OpenGL, mais très très délicat. Dans DirectX 11, vous pouvez également effectuer des appels de dessin, à partir de nombreux threads, ce qui devrait améliorer les performances, mais ce n'est pas une pratique courante. Je pense que la dernière version d'UnrealEngine4 le fait. Cependant, avec DirectX 12 et Vulkan, le rendu multi-threading va être une vraie affaire.
darius
1

Quelques raisons possibles:

  • Historiquement, la qualité du pilote OpenGL a beaucoup varié, mais je ne suis plus sûr que ce soit le cas.
  • Xbox prend en charge D3D, donc le portage d'un jeu entre celui-ci et le PC est plus facile.
  • Les outils de débogage pour D3D ont été meilleurs que pour OpenGL. Heureusement, nous avons maintenant RenderDoc
SurvivalMachine
la source