Pourquoi les développeurs de jeux préfèrent-ils Windows?
396
Est-ce que DirectX est plus facile ou meilleur qu'OpenGL, même si OpenGL est multi-plateforme? Pourquoi ne voyons-nous pas de vrais jeux puissants pour Linux comme il en existe pour Windows?
Fausse prémisse - où est la preuve que les développeurs de jeux préfèrent Windows? Je pense que @ user17674 avait plus de précision - ils veulent développer des plates-formes afin de pouvoir vendre plus et gagner plus d'argent :-)
Rory Alsop
258
Les développeurs de virus préfèrent également Windows. Tout repose sur la base d'utilisateurs.
CesarGon
4
Pourquoi les programmeurs Windows préfèrent DirectX à OpenGL est une question historiquement plus intéressante. Comme l'indique le lien vers l'interview de Carmack ci-dessous, DX était jadis détesté. Il serait intéressant de savoir comment il est gardé assez d'utilisateurs pour que MS puisse le supporter jusqu'à ce que la Xbox et les réécritures modernes le rendent plus populaire. Ou peut-être que c'était juste assez bon pour que les gens s'en tiennent à ça.
CodexArcanum
100
Pourquoi les gens volent les banques? Parce que c'est où l'argent est .
GrandmasterB
7
@CesarGon: Ce n'est pas seulement à cause de la base d'utilisateurs mais aussi pour la facilité de développement.
Giorgio
Réponses:
1154
Beaucoup de réponses ici sont vraiment très bonnes. Mais le problème OpenGL et Direct3D (D3D) devrait probablement être résolu. Et cela nécessite ... une leçon d'histoire.
Et avant de commencer, j'en connais beaucoup plus sur OpenGL que sur Direct3D . Je n'ai jamais écrit une ligne de code D3D de ma vie et j'ai écrit des tutoriels sur OpenGL. Donc, ce que je vais dire n’est pas une question de partialité. C'est simplement une question d'histoire.
Naissance du conflit
Un jour, au début des années 90, Microsoft a regardé autour de lui. Ils ont vu la SNES et Sega Genesis être géniaux, avec beaucoup de jeux d’action et autres. Et ils ont vu DOS . Les développeurs ont codé les jeux DOS comme des jeux de console: directement sur du métal. Contrairement aux consoles cependant, où un développeur qui a créé un jeu SNES connaissait le matériel dont disposerait l'utilisateur, les développeurs DOS devaient écrire pour plusieurs configurations possibles. Et c'est plutôt plus difficile qu'il n'y paraît.
Et Microsoft avait un plus gros problème: Windows. Vous voyez, Windows voulait posséder le matériel, contrairement à DOS qui laissait les développeurs faire n'importe quoi. Posséder le matériel est nécessaire pour assurer la coopération entre les applications. La coopération est exactement ce que les développeurs de jeux détestent, car elle nécessite d’importantes ressources matérielles qu’ils pourraient utiliser pour devenir géniaux.
Afin de promouvoir le développement de jeux sous Windows, Microsoft avait besoin d’une API uniforme, de bas niveau, fonctionnant sous Windows sans être ralentie, et surtout multi-matériels . Une seule API pour tous les graphiques, le son et le matériel d'entrée.
Les accélérateurs 3D sont nés quelques mois plus tard. Et Microsoft a eu des ennuis. Voir DirectDraw, le composant graphique de DirectX, ne traitait que des graphiques 2D: allouer de la mémoire graphique et effectuer des mélanges de bits entre différentes sections de mémoire allouées.
Donc, Microsoft a acheté un peu de middleware et l'a transformé en Direct3D Version 3. Il a été universellement critiqué. Et avec raison. Regarder le code D3D v3, c'est comme regarder l'arche de l'alliance.
Le vieux John Carmack d'Id Software a jeté un coup d'œil à cette corbeille et a dit: "Fous ça!" et a décidé d'écrire vers une autre API: OpenGL.
Vous voyez, une autre partie de la bête aux multiples têtes que Microsoft avait été occupée à travailler avec SGI sur une implémentation OpenGL pour Windows. L'idée ici était de courtiser les développeurs d'applications GL typiques: les applications de poste de travail. Les outils de CAO, la modélisation, ce genre de chose. Les jeux étaient la chose la plus distante dans leur esprit. Il s’agissait principalement de Windows NT, mais Microsoft a également décidé de l’ajouter à Win95.
Afin d'attirer les développeurs de stations de travail vers Windows, Microsoft a décidé d'essayer de les corrompre en leur donnant accès à ces nouvelles cartes graphiques 3D. Microsoft a mis en œuvre le protocole Installable Client Driver: un fabricant de cartes graphiques pourrait remplacer l'implémentation logicielle OpenGL de Microsoft par une implémentation matérielle. Le code pourrait automatiquement utiliser une implémentation OpenGL matérielle, le cas échéant.
À l'origine, les cartes vidéo grand public ne prenaient pas en charge OpenGL. Cela n'a pas empêché Carmack de simplement porter Quake sur OpenGL (GLQuake) sur son poste de travail SGI. Comme on peut le lire dans le readme de GLQuake:
Théoriquement, glquake fonctionnera sur tout OpenGL conforme prenant en charge les extensions d’objets de texture, mais à moins que ce ne soit un matériel très puissant qui accélère tout ce qui est nécessaire, le jeu ne sera pas acceptable. S'il doit passer par un chemin d'émulation de logiciel, les performances seront probablement bien inférieures à une image par seconde.
En mars 1997, le seul matériel opengl standard capable de jouer de manière raisonnable est un réalisme intergraphe, une carte TRES chère. 3dlabs a amélioré leurs performances de manière significative, mais avec les pilotes disponibles, il n'est toujours pas assez bon pour jouer. Certains des pilotes 3dlabs actuels pour les cartes glint et permedia peuvent également provoquer le blocage de NT lors de la sortie d'un fonctionnement en plein écran. Je vous déconseille donc d'exécuter glquake sur du matériel 3dlabs.
3dfx a fourni un opengl32.dll qui implémente tout ce dont glquake a besoin, mais ce n'est pas une implémentation opengl complète. Il est très peu probable que d'autres applications opengl fonctionnent avec cette application, considérez-la donc fondamentalement comme un «pilote glquake».
Ce fut la naissance des pilotes miniGL. Celles-ci ont finalement évolué vers des implémentations OpenGL complètes, à mesure que le matériel devenait suffisamment puissant pour implémenter la plupart des fonctionnalités OpenGL dans le matériel. nVidia a été le premier à proposer une implémentation OpenGL complète. De nombreux autres fournisseurs ont eu des difficultés, raison pour laquelle les développeurs ont préféré Direct3D: ils étaient compatibles avec une gamme plus étendue de matériel. Finalement, seuls nVidia et ATI (maintenant AMD) sont restés et les deux ont eu une bonne implémentation OpenGL.
OpenGL Ascendant
Ainsi, la scène est définie: Direct3D vs OpenGL. C'est vraiment une histoire incroyable, compte tenu de la gravité de D3D v3.
L’OpenGL Architectural Review Board (ARB) est l’organisation responsable de la maintenance de OpenGL. Ils émettent un certain nombre d'extensions, maintiennent le référentiel d'extensions et créent de nouvelles versions de l'API. L'ARB est un comité composé de nombreux acteurs de l'industrie graphique, ainsi que de fabricants de systèmes d'exploitation. Apple et Microsoft ont été à plusieurs reprises membres de l'ARB.
3Dfx sort avec le Voodoo2. C'est le premier matériel capable de faire du multitexturing, ce qu'OpenGL ne pouvait pas faire auparavant. Alors que 3Dfx était fermement opposé à OpenGL, NVIDIA, fabricant de la prochaine puce graphique multitexturation (la TNT1), a adoré. L'ARB a donc publié une extension: GL_ARB_multitexture, qui permettrait d'accéder au multitexturing.
Pendant ce temps, Direct3D v5 est sorti. Maintenant, D3D est devenu une API réelle , plutôt que ce qu'un chat pourrait vomir. Le problème? Pas de multitexturing.
Oops.
Maintenant, celui-ci ne ferait pas autant mal qu'il aurait dû, car les utilisateurs n'utilisaient pas beaucoup le multitexturing. Pas directement. Le multitexturing nuit beaucoup aux performances et, dans de nombreux cas, cela ne valait pas la peine comparé au multi-dépassement. Et bien sûr, les développeurs de jeux aiment faire en sorte que leurs jeux fonctionnent sur du matériel plus ancien, qui ne faisait pas appel au multitexturation, et de nombreux jeux livrés sans ce matériel.
D3D se voit donc accorder un sursis.
Le temps passe et NVIDIA utilise la GeForce 256 (pas la GeForce GT-250; la toute première GeForce), qui met pratiquement fin à la concurrence dans les cartes graphiques pour les deux prochaines années. Le principal argument de vente est la possibilité d'effectuer la transformation de sommet et l'éclairage (T & L) dans le matériel. De plus, NVIDIA a tellement aimé OpenGL que leur moteur T & L était effectivement OpenGL. Presque littéralement; si je comprends bien, certains de leurs registres prenaient en réalité directement les énumérateurs OpenGL comme valeurs.
Direct3D v6 est sorti. Multitexture enfin mais ... pas de matériel T & L. OpenGL avait toujours eu un pipeline T & L, même avant le 256, il était implémenté dans le logiciel. Il était donc très facile pour NVIDIA de convertir leur implémentation logicielle en solution matérielle. Ce ne serait pas avant D3D v7 avant que D3D ait enfin pris en charge le matériel T & L.
Aube des Shaders, crépuscule d'OpenGL
Ensuite, GeForce 3 est sorti. Et beaucoup de choses se sont passées en même temps.
Microsoft avait décidé qu'ils ne seraient plus en retard. Ainsi, au lieu de regarder ce que faisait NVIDIA et de le copier après coup, ils ont pris l’étonnante position de s’adresser à eux et de leur parler. Et puis ils sont tombés amoureux et ont eu une petite console ensemble.
Un divorce compliqué s'ensuivit plus tard. Mais c'est pour une autre fois.
Cela signifiait pour le PC que GeForce 3 était sorti simultanément avec D3D v8. Et il n’est pas difficile de voir comment GeForce 3 a influencé les shaders de D3D 8. Les pixel shaders de Shader Model 1.0 étaient extrêmement spécifiques au matériel de NVIDIA. Aucune tentative n'a été faite pour extraire le matériel de NVIDIA; SM 1.0 était exactement ce que la GeForce 3 faisait.
Lorsque ATI a commencé à se lancer dans la course aux cartes graphiques de performance avec la Radeon 8500, un problème est survenu. Le pipeline de traitement des pixels du 8500 était plus puissant que celui de NVIDIA. Ainsi, Microsoft a publié Shader Model 1.1, qui était essentiellement "Quoi que fasse le 8500".
Cela peut sembler être un échec de la part de D3D. Mais l'échec et le succès sont une affaire de degrés. Et un échec épique se produisait dans OpenGL-land.
NVIDIA aimait OpenGL, alors quand GeForce 3 est apparue, ils ont sorti de nombreuses extensions OpenGL. Extensions propriétaires OpenGL: NVIDIA uniquement. Naturellement, lorsque le 8500 est arrivé, il ne pouvait en utiliser aucun.
Voir, au moins dans D3D 8 Land, vous pouvez exécuter vos shaders SM 1.0 sur du matériel ATI. Bien sûr, vous deviez écrire de nouveaux shaders pour profiter de la fraîcheur du 8500, mais au moins votre code fonctionnait .
Afin d’avoir des shaders de tout type sur Radeon 8500 dans OpenGL, ATI devait écrire un certain nombre d’extensions OpenGL. Extensions propriétaires OpenGL: ATI uniquement. Il fallait donc un chemin de code NVIDIA et un chemin de code ATI, juste pour avoir des shaders .
Maintenant, vous pourriez demander: "Où était l'OpenGL ARB, qui était chargé de maintenir OpenGL à jour?" Là où beaucoup de comités finissent souvent par être stupides.
Vous voyez, j'ai mentionné ARB_multitexture ci-dessus parce que cela prend en compte tout cela. L'ARB semblait (du point de vue d'un étranger) vouloir éviter complètement l'idée de shaders. Ils ont estimé que s’ils plaçaient suffisamment de possibilités de configuration sur le pipeline à fonction fixe, ils pourraient égaler la capacité d’un pipeline de shader.
Donc, l'ARB a publié extension après extension. Chaque extension avec les mots "texture_env" était une nouvelle tentative de correction de cette conception vieillissante. Vérifiez le registre: entre les extensions ARB et EXT, huit de ces extensions ont été réalisées. Beaucoup ont été promus aux versions de base d'OpenGL.
Microsoft faisait partie de l'ARB à cette époque; ils sont partis à peu près au moment où D3D 9 a frappé. Il est donc tout à fait possible qu'ils travaillent à saboter OpenGL d'une manière ou d'une autre. Personnellement, je doute de cette théorie pour deux raisons. Premièrement, ils auraient dû obtenir l’aide d’autres membres de la CRÉA, car chaque membre n’avait qu’une voix. Et plus important encore, l'ARB n'a pas eu besoin de l'aide de Microsoft pour tout gâcher. Nous verrons d'autres preuves de cela.
Finalement, ARB, probablement sous la menace d'ATI et de NVIDIA (deux membres actifs), a finalement tiré la tête assez longtemps pour fournir de véritables shaders de type assemblage.
Tu veux quelque chose d'encore plus stupide?
Matériel T & L. Quelque chose avait été ouvert par OpenGL . Eh bien, c'est intéressant. Pour tirer le maximum des performances possibles de T & L matériel, vous devez stocker vos données de sommet sur le GPU. Après tout, c’est le GPU qui souhaite utiliser vos données de sommet.
Dans D3D v7, Microsoft a introduit le concept de mémoire tampon Vertex. Ce sont des bandes de mémoire GPU allouées pour stocker les données de sommet.
Vous voulez savoir quand OpenGL a obtenu son équivalent? Oh, NVIDIA, étant un amoureux de tout ce qui concerne OpenGL (tant qu’il s’agit d’extensions propriétaires NVIDIA), a publié l’extension de la plage de sommets au moment de la première utilisation de la GeForce 256. Mais quand l'ARB a-t-il décidé de fournir une fonctionnalité similaire?
Deux ans plus tard . C'était après qu'ils aient approuvé les shaders de vertex et de fragment (pixel en langage D3D). C’est le temps qu’a pris l’ARB à développer une solution multiplate-forme pour stocker les données de vertex dans la mémoire du processeur graphique. Là encore, T & L a besoin de matériel pour atteindre des performances optimales.
Une langue pour tous les ruiner
L’environnement de développement OpenGL a donc été fracturé pendant un certain temps. Pas de shaders cross-hardware, pas de stockage de vertex GPU cross-hardware, alors que les utilisateurs de D3D ont profité des deux. Cela pourrait-il empirer?
Qui sont-ils, vous pourriez demander? C’est une entreprise disparue que je considère comme le véritable tueur d’OpenGL. Bien sûr, l’inefficacité générale de l’ARB a rendu OpenGL vulnérable alors qu’il aurait dû posséder D3D. Mais 3D Labs est peut-être la principale raison qui me fait penser à l'état actuel du marché d'OpenGL. Qu'est-ce qu'ils auraient pu faire pour causer ça?
Ils ont conçu le langage de masquage OpenGL.
Vous voyez, 3D Labs était une entreprise mourante. Leurs GPU onéreux étaient marginalisés par la pression croissante de NVIDIA sur le marché des stations de travail. Et contrairement à NVIDIA, 3D Labs n’était pas présent sur le marché grand public; si NVIDIA gagnait, ils mourraient.
Ce qu'ils ont fait.
Ainsi, dans le but de rester pertinents dans un monde qui ne voulait pas de leurs produits, 3D Labs s'est présenté à une conférence de développeurs de jeux avec des présentations pour ce qu'ils ont appelé "OpenGL 2.0". Ce serait une réécriture complète de l’API OpenGL à partir de zéro. Et cela a du sens; L'API d'OpenGL était très cruelle à l'époque (note: cette crue existe toujours). Il suffit de regarder comment le chargement et la liaison des textures fonctionnent. c'est semi-arcanique.
Une partie de leur proposition était un langage ombré. Naturellement. Cependant, contrairement aux extensions ARB multi-plateformes actuelles, leur langage d’ombrage était «de haut niveau» (C est un niveau élevé pour un langage d’ombrage. Oui, vraiment).
Maintenant, Microsoft travaillait sur son propre langage d’ombrage de haut niveau. Dans l’ensemble de l’imaginaire collectif de Microsoft, ils ont appelé le langage HLSL (High Level Shading Language). Mais leur approche des langues était fondamentalement différente.
Le plus gros problème avec le langage de shader de 3D Labs était qu'il était intégré. Voir, HLSL était un langage défini par Microsoft. Ils ont publié un compilateur et généré un code d'assemblage Shader Model 2.0 (ou des modèles de shader ultérieurs), que vous alimenteriez dans D3D. Dans les jours D3D v9, HLSL n'a jamais été directement touché par D3D. C'était une belle abstraction, mais c'était purement facultatif. Et un développeur a toujours eu l’occasion de passer derrière le compilateur et d’ajuster le résultat pour obtenir des performances maximales.
Le langage 3D Labs n'avait rien de tout cela. Vous avez donné au conducteur le langage semblable à C et cela a produit un shader. Fin de l'histoire. Pas un assembleur, pas quelque chose qui nourrit autre chose. L'objet OpenGL réel représentant un shader.
Cela signifiait que les utilisateurs d'OpenGL étaient ouverts aux caprices des développeurs qui venaient de se familiariser avec la compilation de langages de type assembleur. Les bogues du compilateur ont été généralisés dans le GLSL (OpenGL Shading Language) récemment baptisé. Pire, si vous réussissiez à faire compiler correctement un shader sur plusieurs plates-formes (ce qui n'est pas une mince affaire), vous restiez soumis aux optimiseurs du jour. Lesquelles n'étaient pas aussi optimales qu'elles pourraient l'être.
Bien que c’était la plus grande faiblesse de GLSL, ce n’était pas la seule. De loin .
Dans D3D et dans les langages d'assemblage plus anciens d'OpenGL, vous pouvez mélanger et assortir des shaders de vertex et de fragment (pixel). Tant qu'ils communiquent avec la même interface, vous pouvez utiliser n'importe quel vertex shader avec n'importe quel fragment compatible. Et il y avait même des niveaux d'incompatibilité qu'ils pouvaient accepter; un vertex shader pourrait écrire un résultat que le fragment shader n'a pas lu. Et ainsi de suite.
GLSL n'avait rien de tout cela. Les shaders de vertex et de fragment ont été fusionnés dans ce que 3D Labs a appelé un "objet programme". Donc, si vous voulez partager des programmes de sommets et de fragments, vous devez créer plusieurs objets de programme. Et cela a causé le deuxième plus gros problème.
Vous voyez, 3D Labs pensait qu'ils étaient intelligents. Ils ont basé le modèle de compilation de GLSL sur C / C ++. Vous prenez un fichier .c ou .cpp et le compilez dans un fichier objet. Ensuite, vous prenez un ou plusieurs fichiers objet et les liez dans un programme. C'est ainsi que GLSL se compile: vous compilez votre shader (sommet ou fragment) en un objet shader. Ensuite, vous placez ces objets shader dans un objet programme et vous les liez ensemble pour former votre programme réel.
Bien que cela ait permis des idées intéressantes potentielles comme avoir des shaders "de bibliothèque" contenant du code supplémentaire que les shaders principaux pouvaient appeler, cela signifiait en pratique que les shaders étaient compilés deux fois . Une fois au stade de la compilation et une fois au stade de la liaison. Le compilateur de NVIDIA en particulier était connu pour exécuter essentiellement la compilation deux fois. Cela n'a pas généré une sorte d'intermédiaire de code objet; il l'a juste compilé une fois et a jeté la réponse, puis l'a compilé à nouveau au moment de la liaison.
Ainsi, même si vous souhaitez lier votre vertex shader à deux fragments différents, vous devez effectuer beaucoup plus de compilation que dans D3D. D'autant que la compilation d'un langage de type C a été réalisée hors ligne , et non au début de l'exécution du programme.
Il y avait d'autres problèmes avec GLSL. Peut-être semble-t-il erroné de blâmer 3D Labs, puisque l'ARB a finalement approuvé et incorporé le langage (mais rien de plus de son initiative "OpenGL 2.0"). Mais c'était leur idée.
Et voici la partie vraiment triste: 3D Labs avait raison (principalement). GLSL n’est pas un langage d’ombrage à base de vecteur comme HLSL l’était à l’époque. En effet, le matériel de 3D Labs était un matériel scalaire (similaire au matériel NVIDIA moderne), mais ils étaient finalement dans la même direction que de nombreux fabricants de matériel.
Ils avaient raison de choisir un modèle de compilation en ligne pour un langage de "haut niveau". D3D a même opté pour cela.
Le problème était que 3D Labs avait raison au mauvais moment . Et en essayant d'appeler trop tôt l'avenir, en essayant d'être à l'épreuve du futur, ils ont écarté le présent . Cela ressemble à la manière dont OpenGL a toujours eu la possibilité d’utiliser la fonctionnalité T & L. Sauf que le pipeline T & L d'OpenGL était toujours utile avant le matériel T & L, tandis que GLSL était un passif avant que le monde ne le rattrape.
GLSL est une bonne langue maintenant . Mais pour le moment? C'était horrible. Et OpenGL en a souffert.
Tomber vers l'apothéose
Bien que je maintienne que 3D Labs a porté le coup fatal, c’est l’ARB lui-même qui enfoncerait le dernier clou dans le cercueil.
C'est une histoire dont vous avez peut-être entendu parler. À l'époque d'OpenGL 2.1, OpenGL rencontrait un problème. Il y avait beaucoup d'héritage cruel. L'API n'était plus facile à utiliser. Il y avait 5 façons de faire les choses, et aucune idée de ce qui était le plus rapide. Vous pouvez "apprendre" OpenGL avec de simples tutoriels, mais vous n'avez pas vraiment appris l'API OpenGL qui vous donnait des performances et une puissance graphique réelles.
Ainsi, l'ARB a décidé de tenter une autre réinvention d'OpenGL. Cela ressemblait à "OpenGL 2.0" de 3D Labs, mais c'était mieux car ARB était derrière. Ils l'appelaient "Longs Peak".
Pourquoi est-il si difficile de prendre un peu de temps pour améliorer l'API? C'était mauvais parce que Microsoft s'était laissé vulnérable. Voir, ce fut au moment du passage Vista.
Avec Vista, Microsoft a décidé d’apporter certaines modifications indispensables aux pilotes d’affichage. Ils ont obligé les pilotes à se soumettre au système d'exploitation pour la virtualisation de la mémoire graphique et diverses autres choses.
Bien que l’on puisse en débattre sur le bien-fondé ou sur la possibilité de le faire, il n'en reste pas moins que Microsoft considère D3D 10 comme étant Vista (et supérieur) uniquement. Même si votre matériel était compatible avec D3D 10, vous ne pouvez pas exécuter d’applications D3D 10 sans exécuter également Vista.
Vous vous souviendrez peut-être aussi que Vista ... hum, disons simplement que cela n'a pas bien fonctionné. Vous disposiez donc d’un système d’exploitation sous-performant, d’une nouvelle API qui ne fonctionnait que sur ce système d’exploitation et d’une nouvelle génération de matériel nécessitant cette API et ce système d’exploitation pour être plus rapide que la génération précédente.
Cependant, les développeurs pouvaient accéder aux fonctionnalités D3D 10-class via OpenGL. Eh bien, ils le pourraient si la CRÉA n’avait pas été occupée par Longs Peak.
Fondamentalement, la CRÉF a consacré un bon travail d’une année et demie à deux ans à améliorer l’API. Au moment où OpenGL 3.0 est sorti, l'adoption de Vista était terminée, Win7 était sur le point de laisser Vista derrière eux, et la plupart des développeurs de jeux ne se souciaient de toute façon pas des fonctionnalités de la classe D3D-10. Après tout, le matériel D3D 10 exécutait parfaitement les applications D3D 9. Et avec la montée en puissance des ports de console à console (ou de développeurs de PC qui se lancent dans le développement de consoles. Faites votre choix), les développeurs n’avaient pas besoin de fonctionnalités D3D 10.
Désormais, si les développeurs avaient déjà accès à ces fonctionnalités via OpenGL sur des machines WinXP, le développement OpenGL aurait peut-être reçu un coup de pouce bien nécessaire. Mais les ARB ont raté leur chance. Et voulez-vous connaître le pire?
Bien qu'ils aient passé deux précieuses années à tenter de reconstruire l'API à partir de zéro ... ils ont quand même échoué et sont simplement revenus au statu quo (à l'exception d'un mécanisme de dépréciation).
Ainsi, non seulement la CRÉA a raté une fenêtre d'opportunité cruciale , mais elle n'a même pas accompli la tâche qui lui a fait perdre de vue cette occasion. Quasiment épique échouer tout autour.
Et c'est l'histoire d'OpenGL contre Direct3D. Une histoire d'opportunités manquées, de stupidité flagrante, d'aveuglement volontaire et de folie simple.
Aviez-vous écrit cela quelque part, ou avez-vous écrit si cela vous venait à l'esprit?
Kristofer Hoch
38
@ Kristofer: Je ne sais pas si vous pouvez l'appeler "par coeur" pour quelque chose qui a pris une heure environ pour composer, mais je ne l'avais pas écrit quelque part.
Nicol Bolas
18
@ F.Aquino: Donc, vous êtes prêt à attribuer cela au système de rendu utilisé par les jeux FPS, plutôt qu'au moteur lui-même? Même si CS est basé sur Half-Life 1, qui est basé sur Quake? Pardon; ne pas l'acheter. Certes, je n’accepte pas l’hypothèse que les nouveaux FPS n’ont aucun potentiel en matière de sport électronique, même s’il existe de nombreux tournois de sports électroniques axés sur les nouveaux FPS. Ils n’ont peut-être pas la même attraction que CS contre certains joueurs, mais ne commettez pas l’erreur de penser que ces joueurs composent l’ensemble des sports électroniques FPS.
Nicol Bolas
165
Sensationnel. Je ne me soucie même pas de la plupart de ces trucs et ça reste une bonne lecture!
Peter Rowell
12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).LOLled pendant plus de 6 minutes à cela.
ApprenticeHacker
133
J'ai trouvé étrange que tout le monde se concentre sur la base d'utilisateurs, lorsqu'il s'agit de «développeurs de jeux», pas de «rédacteurs de jeux».
Pour moi, en tant que développeur, Linux est un foutoir. Il y a tellement de versions, de gestionnaires de bureau, de kits d'interface utilisateur, etc. Si je ne veux pas distribuer mon travail en open source, l'utilisateur peut (essayer de) le recompiler de manière à ce qu'il corresponde à sa combinaison unique de paquets, bibliothèques et paramètres, c'est un cauchemar !
D'autre part, Microsoft fournit (la plupart du temps) une incroyable compatibilité ascendante et une stabilité de plate-forme. Il est possible de cibler toute une gamme de machines avec un programme d'installation à source fermée, par exemple des ordinateurs exécutant Windows XP, Vista et des versions 7, 32 et 64 bits, sans les redistribuables DX ou VC appropriés, etc.
Une dernière chose, s’IL VOUS PLAÎT TOUT LE MONDE SUR INTERNET ARRÊTEZ COMPARANT OPENGL ET DIRECTX! Comparez Direct3D à OpenGL ou ne le faites pas . DirectX prend en charge les entrées, le son, la lecture de films, etc., contrairement à OpenGL.
"Pour moi, en tant que développeur, Linux est un foutoir." En effet! Je travaille dans un environnement avec Fedora et Ubuntu. Nous avons des problèmes même entre ces deux-là. (Je dois ajouter que je suis un fan de Linux.)
David Poole Le
48
@ jv42: Cela semble être une idée fausse commune: presque toutes les versions, les gestionnaires de bureau, les kits d'interface utilisateur, etc. ne sont pas du tout nécessaires pour faire fonctionner un jeu. Si votre jeu (livré) dépend de plus de libGL, libX11 et libasound (ou libopenal ou libao ou liboss), vous faites quelque chose de mal.
Greyfade
19
@greyfade "Si votre jeu (tel que livré) dépend de plus que libGL, libX11 et libasound (ou libopenal ou libao ou liboss), vous faites quelque chose de mal." - Et ensuite vous créez un lien vers libao-0.0.4alpha, et votre utilisateur a libao-0.0.5beta et rien ne fonctionne.
quant_dev
17
Emballer un binaire pour qu'il fonctionne sur toutes les distributions Linux n'est pas si difficile. Heck, les développeurs de Blender le font avec chaque version. Il n’ya qu’un seul paquet (bien deux, 32 et 64 bits) de la version Linux de Blender.
C'est parce qu'il y a plus d'utilisateurs Windows sur la planète que Linux et Mac. La vérité est que les gens fabriquent des produits pour le marché le plus important.
La même chose vaut pour les téléphones mobiles: Android et iPhone ont des jeux impressionnants, mais Windows Mobile et Symbian ne ...
@Mahmoud Hossam: Ce n'est pas vrai. Utiliser OpenGL ne signifie pas que votre application entière fonctionnera comme par magie dans un environnement * nix, cela signifie que le moteur graphique fonctionnera (et même dans ce cas, cela ne signifie pas qu'il n'y a pas de problèmes sur Windows (par exemple) qui ne fonctionne pas. existent sur Linux et vice versa). Cela ne fait pas tout le panier et le maintien de leur code sur plusieurs plates-formes représente un coût considérable.
Ed S.
5
@Mahmoud: Exactement. Et si vous ne vous souciez pas du tout de porter sur Linux / Mac OS, pourquoi ne pas utiliser la bibliothèque native? DirectX est bien mieux supporté sous Windows qu’OpenGL.
Dean Harding
10
@Mahmoud: la prémisse de la question est la suivante: "Pourquoi les développeurs préfèrent-ils Windows"? Réponse: parce que c'est ce que les joueurs utilisent. Le portage sur Linux / Mac ne sert à rien s'il ne représente que 2% de votre marché. Dans ce cas, utiliser OpenGL ne sert à rien si vous n'allez pas effectuer de portage de toute façon.
Dean Harding
4
@Mahmoud, ce n'est pas le travail du développeur de jeux de faire passer les gens à Linux.
GrandmasterB
6
@ John 10+ millions de joueurs de World of Warcraft aimeraient vous parler. Et ce n'est qu'un jeu.
Marcelo
50
Comme Windows détient plus de 90% du marché et que Linux (puisque vous avez spécifiquement posé des questions sur Linux) a la réputation de compter de nombreux utilisateurs qui n’aiment pas payer pour un logiciel. Que ce soit vrai ou non, c'est sans importance; la perception est là et influence les décisions des gens.
Si les développeurs utilisent OpenGL, ils prendront en charge Windows et Linux. Il sera donc un avantage marketing d'attirer les utilisateurs de Linux qui sont disposés à payer et utilisent Linux parce qu'ils croient que c'est mieux.
M.Sameer
9
Même en utilisant OpenGL, le développement et les tests multi-plateformes ont des coûts que le marché Linux ne justifie pas. Directx est également (malheureusement) une meilleure plate-forme pour le jeu sur PC à l'heure actuelle qu'OpenGL - il y a très peu de nouveaux jeux sur PC développés avec OpenGL.
Martin Beckett
25
Multiplier les plateformes n'est pas aussi simple que "juste du code pour OpenGL".
System Down
13
Ce n'est pas vrai en fait, les utilisateurs de Linux ne paieront pas pour un logiciel. Le Humble Indie Bundle (un ensemble de jeux que vous pouvez obtenir pour n’importe quelle somme que vous souhaitez payer) a été créé deux fois maintenant et chaque fois que les utilisateurs de Linux payaient plus que les utilisateurs de Windows pour ce dernier.
Htbaa
9
@Htbaa Bien sûr, ils ont payé plus cher, ils étaient désespérés, ce sont probablement les seuls jeux auxquels ils ont accès sur leur système d'exploitation.
Ce n'était pas vrai pour le Mac, et ce n'est pas vrai maintenant. Pas même pour iOS. Apple ne fournit pas d'outils pour le développement de jeux iOS. Mais c'est un marché énorme (il y a plus d'iPhones que de PC en 1995) avec relativement peu de concurrence, donc les gens le font quand même.
Pour ce qui est de Linux, il n’ya même pas une sorte d’institution centrale qui puisse définir une quelconque priorité. La direction dans laquelle Linux évolue est davantage déterminée par un groupe de très bons programmeurs, mais légèrement déréglés.
Pour créer un jeu PC aujourd'hui, vous avez besoin de beaucoup d'artistes 2D / 3D, de concepteurs de jeux, de scénaristes, d'acteurs, de testeurs, etc. En ce qui concerne la programmation réelle, vous pouvez simplement utiliser un moteur de jeu réel (CryEngine, Unreal Engine, Quake Engine, Source Engine). Donc, vous pourrez peut-être faire le tout sans aucun programmeur réel.
Pour cette raison, et en raison de la nature des entreprises, les programmeurs n’ont pas grand-chose à dire sur la plate-forme choisie. Et, de manière générale, les responsables recherchent un support, ce que Microsoft prétend proposer, et traitent des problèmes qui peuvent en quelque sorte être saisissants pour leurs modèles de pensée, contrairement à l'open source.
Pour cette raison, la plupart des logiciels commerciaux destinés aux utilisateurs finaux sont développés sous Windows.
Je travaille pour une entreprise qui crée des jeux flash et qui n'est donc pas liée à une plate-forme particulière. Cependant, nous développons tous sous Windows, car la plupart des outils que nous utilisons ne sont pas disponibles pour Linux.
"Alors vous pourrez peut-être faire le tout sans aucun programmeur réel." Tu as oublié le sarcasme.
Allon Guralnek
@AllonGuralnek: Pas de sarcasme là-bas. Dans le développement de jeux classiques de grands jeux, les programmeurs créeront des moteurs et des moyens pour fournir du contenu et des comportements (via des éditeurs visuels ou des scripts réels), puis les concepteurs de jeux / niveaux / missions utiliseront ces moyens. Si vous achetez un moteur en état de marche et suffisamment puissant, vous pouvez en principe supprimer la première étape.
back2dos
2
Avez-vous un exemple spécifique d'un jeu raisonnablement remarquable qui a été créé sans écrire une seule ligne de code?
Allon Guralnek
1
@AllonGuralnek: Je n'ai pas dit que quiconque créerait des jeux sans code , mais sans programmeurs . Vous n'avez pas besoin d'être un programmeur pour créer un mod totalement révolutionnaire. DotA est le plus populaire auquel je puisse penser de façon spontanée.
back2dos
1
@AllonGuralnek: Non. Les personnes qui écrivent du code sont celles qui écrivent du code. Les concepteurs de niveaux doivent avoir une certaine compréhension du script. De nombreux programmeurs doivent souvent posséder certaines compétences en gestion. Cela ne fait pas du premier un programmeur, ni du second un gestionnaire. De plus, votre évaluation de DotA est erronée. Premièrement, cela change complètement le jeu, transformant une RTS en un nouveau genre et, deuxièmement, il est considéré comme un jeu séparé par de nombreuses ligues de sports électroniques, y compris l'ESWC
back2dos
10
Comme certains l’ont déjà dit, la partie la plus importante est la base d’utilisateurs. 95% des utilisateurs de PC utilisent Windows. Les joueurs sur PC utilisent presque exclusivement Windows. Même ceux qui utilisent Mac ou Linux exécutent le plus souvent des jeux Windows via une virtualisation ou une émulation (à de très rares exceptions près).
Mais la démographie n'est pas tout. Je ne sous-estimerais pas le rôle de Microsoft pour rendre la plate-forme plus attrayante pour les développeurs de jeux. En gros, vous avez accès à un ensemble d’outils complet et gratuit , principalement à XNA Game Studio . Cela permet non seulement le développement pour Windows, mais également pour la Xbox 360 . Et avec la dernière édition, même pour les téléphones WP7. Évidemment, comme c'est un outil Microsoft, il utilise DirectX, pas OpenGL.
Remarque pour tous les lecteurs voyageant dans le temps: à partir d'avril 2014, XNA sera officiellement mort. La dernière version (4.0) a été publiée en 2010 et ne verra pas de nouvelle version d’ici (2013) avant son coucher du soleil.
Aren
1
Autre remarque pour tous les lecteurs voyageant dans le temps: le développement de Windows 8 (et supérieur) ne sera plus gratuit à l'avenir.
Fouric
6
Ewwww, je pas. J'utilise presque exclusivement Linux. Je double-amorçage sur Windows pour créer des versions de Windows et utiliser les versions de Mac pour les versions de Mac, mais c'est tout.
Le truc, c'est un framework multiplateforme que nous avons développé au fil des ans. Nos jeux sont construits à partir de cela et se comportent de manière identique dans Linux / OpenGL, Mac / OpenGL et Windows / Direct3D (et bientôt dans iOS / OpenGL).
Certes, ma société ne fabrique pas de titres AAA, elle ne s’applique donc peut-être pas à ces jeux, mais nous réalisons des jeux tout à fait décontractés (voir site Web - CSI: NY, Murder She Wrote et les deux prochaines publications en 2011 sont des exemples de titres utilisant des licences importantes, The Les affaires perdues de Sherlock Holmes 1 et 2 ont également été couronnées de succès)
Je n'abandonnerais jamais gedit + gcc + gdb + valgrind.
@ Alexander, sous-estimé ne commence même pas à expliquer
Shahbaz le
3
Désolé, j'ai finalement abandonné gedit. J'utilise maintenant gvim et je suis beaucoup plus heureux :)
ggambett
4
Inertie. Si vous avez déjà utilisé Windows par le passé, passer à autre chose est une tâche ardue. Si vous utilisez Windows DirectX, il est plus facile et plus susceptible de fonctionner que OpenGL.
Part de marché. La part de marché de Windows sur le bureau est supérieure à celle d’OS X, qui à son tour est supérieure à celle de Linux. L'argent parle.
Marque. DirectX est mieux connu que des choses comme SDL (c'est le genre de choses dont vous auriez besoin pour répliquer certaines fonctionnalités de DirectX qui vont au-delà d'OpenGL).
De nos jours, Linux est plus une curiosité en matière de développement de jeux et la plupart des développeurs feraient mieux d’utiliser fiscalement une version de port OS X avant une version de Linux (voir des choses comme Steam). Même dans ce cas, le marché des consoles vaut plus que ces deux plates-formes combinées pour les jeux ...
Si vous vouliez utiliser une plateforme mono, DirectX convient. Si vous voulez être multi-plateforme, il y a de fortes chances que vous deviez utiliser OpenGL sur au moins certaines des autres plates-formes.
La réponse à la question 4 est: 2+. Mesa3D prend en charge jusqu’à OpenGL 2.1, ce qui signifie que tous les pilotes graphiques pour le matériel 3D pour X11 prennent en charge au moins OpenGL 2.1 depuis Mesa version 6.8. Cela couvre toutes les distributions Linux publiées ces deux dernières années, ainsi que les pilotes binaires fournis par NVIDIA et AMD prenant en charge les versions 3.0 et supérieures. Cela n'inclut pas les utilisateurs d'Intel895, mais ils sont obsolètes.
Greyfade
1
J'ai bien peur que ce ne soit pas le cas. Les ordinateurs équipés de jeux de puces i915 / i945 (GMA 900/950) sont (toujours) en cours de vente et ne sont pas obsolètes. Même sur les distributions modernes d'il y a quelques mois (Ubuntu 11.04 / Fedora 15), glxinfo retournera une version OpenGL ne dépassant pas la version 1.4 (Mesa 7.11-devel). Un tel matériel Intel ne peut tout simplement pas utiliser les versions ultérieures sans aide logicielle. Ainsi, jusqu'à ce que softpipe soit disponible par défaut, Linux sur de telles cartes ne produira jamais une version plus récente d'OpenGL. Le ciblage d'OpenGL 2.0 (ou supérieur) arrêtera l'exécution d'un programme sur une large gamme de systèmes de bureau Linux ...
Anon,
Malgré tout, je ne vois pas l'inquiétude. Ces mêmes chipsets ont des limitations sur Windows, de sorte que la plupart des jeux comportant beaucoup de graphiques seraient de toute façon hors de question .
Greyfade
4
La réponse est évidente. L’écriture d’un jeu a pour objectif de gagner de l’argent. De plus en plus d'utilisateurs finaux utilisent Windows, par conséquent, le marché est plus important et vous vous attendez à gagner plus d'argent avec un jeu Windows qu'avec un jeu Linux. C'est si simple.
Si jamais vous vous posez la question "Pourquoi quelqu'un fait-il ...", rappelez-vous que l'argent fait tourner le monde.
Oui, mais vous pouvez créer un jeu multi-plateformes et obtenir plus que des utilisateurs de Windows;)
M.Sameer
Être multi-plateforme n'est pas tout. Si le nombre d'utilisateurs supplémentaires que vous obtenez est un pourcentage relativement faible, vous devez équilibrer les coûts de développement supplémentaires et les coûts de support en cours par rapport aux ressources supplémentaires que vous obtiendrez et prendre une décision éclairée en fonction des données réelles. Il n'y a pas de bonne ou de mauvaise réponse à cette question à l'échelle mondiale, mais il existe une réponse qui est bonne ou mauvaise pour chaque programme, et ce qui est juste pour un programme peut être mauvais pour un autre.
Maximus Minimus
4
Outils, outils, outils.
C'est ce que cela revient à. Développez sur Windows et accédez à certains des meilleurs outils de développement de la planète. Rien ne vient même à distance proche du débogueur de Visual Studio, les runtime de débogage de DirectX sont géniaux, PIX est génial, et des équivalents comparables n'existent tout simplement pas sur d'autres plates-formes / API. Bien sûr, il y a quelques bonnes choses là-bas; Je ne dis pas que les outils sur d'autres plates-formes sont mauvais, mais ceux fournis par MS sont tellement en avance sur le peloton (exception honorable: Valgrind) qu'ils ne sont même pas drôles.
En bout de ligne, ces outils vous aident. Ils vous aident à faire avancer les choses, ils vous aident à être productif, ils vous aident à vous concentrer sur les erreurs dans votre propre code plutôt que de vous battre avec une API qui ne se comporte jamais comme prévu.
PIX est génial. Déboguer les shaders en cliquant sur un pixel gênant et voir ce qui est arrivé est génial!
Chris Pitman
4
J'ai donc passé en revue toutes ces réponses et, en tant que développeur de jeux disposant de code sur des jeux de console déjà installés sur des tablettes Walmart, j'ai une réponse très différente.
Distribution.
Vous voyez, si vous voulez être sur une console Nintendo, vous devez obtenir la permission de Nintendo, acheter dans les usines de Nintendo, payer les frais généraux de Nintendo, négocier avec Walmart, traiter avec l'entreposage, vous avez besoin d'argent pour fabriquer, imprimer, imprimer des boîtes , faire toutes les assurances, et cetera.
Si vous voulez sur la XBox, bien sûr, il y a XBLA, mais vous avez toujours besoin de la bénédiction de Microsoft, vous devez attendre votre tour, il faut des dizaines de milliers de dollars pour publier un correctif, etc.
Sur iOS, vous avez toujours besoin de l'accord d'Apple, et ils peuvent (et le font) vous tirer de manière capricieuse.
Sur Steam, vous avez toujours besoin de l'autorisation de Valve ou de feu vert, ainsi que de beaucoup d'argent.
.
Sur Windows? Vous configurez un site Web et un bouton de téléchargement.
.
Je ne dis pas que les autres plates-formes ne sont pas utiles. Mais il y a tellement * de * choses horribles qui se passent lorsque vous essayez de développer un jeu, que pour moi, la promesse de pouvoir gifler un fichier binaire sur un site et de se concentrer sur le travail - au moins pour commencer - réduit vraiment beaucoup d'obstacles d'échec potentiels.
"Nous pouvons faire le portage XBLA plus tard, quand les choses seront stables".
Et dans une moindre mesure, cela convient également pour Linux, et si sept clients sont bons, vous pouvez commencer par là.
Mais Windows présente trois avantages considérables: un développement réellement ouvert, un déploiement réellement ouvert et une base de clients très vaste et très active qui s’intéresse aux produits bizarres.
Il est difficile d’imaginer où je préférerais commencer.
non, ils ont créé DX car OGL n'est pas optimisé pour Windows, ne peut pas être étendu rapidement pour tirer parti des nouveaux développements
liés au
2
iow DX est spécialisé pour Windows pour des raisons de performances et pour permettre à Microsoft de continuer dans cette voie et d'intégrer rapidement les nouvelles technologies à mesure de leur disponibilité. OpenGL est bloqué au niveau du support matériel graphique qui existait il y a 5 ans, peut-être davantage, parce que c'est un effort du comité.
Jwenting
1
@jwenting Je ne pense pas que les performances étaient la seule raison pour laquelle ils ne l'ont pas transféré sur d'autres plateformes. Je veux dire que s'ils voulaient le porter, au moins ils l'auraient ouvert en source et laissé à la communauté le soin de l'implémenter. il.
Mahmoud Hossam
1
ils n'ont pas ouvert la source C #, ils ont soumis la spécification de langue aux organismes de normalisation. Microsoft est membre de ces organismes de normalisation et fait ce genre de choses tout le temps (par exemple, ils apportent une contribution importante aux standards HTML, javascript et autres). L’approvisionnement en Open Source aurait signifié la publication du code source du compilateur et des bibliothèques sous quelque chose comme l’APL.
Jwenting
1
@jwenting: Pour mémoire, il existe une implémentation de Direct3D 10 et 11 sur Linux qui cible le framework Gallium3D. (Et cela n'a rien à voir avec Wine.) Je suis également en désaccord avec votre affirmation selon laquelle "OGL n'est pas optimisé pour Windows". C'est un problème d'implémentation de pilotes matériels, pas une limitation d'OpenGL.
Greyfade
1
Beaucoup de choses ont à voir avec la politique et le contrôle. À la fin des années 90, SGI et MS ont convenu d'associer leurs efforts:
Tout simplement parce que Linux a terriblement échoué en tant que système de bureau. Comme quelqu'un l'a souligné précédemment, Linux est un gâchis pour les développeurs (bibliothèques différentes, kits d'outils utilisateur, etc.)
Un autre problème est le freetardism et le manque de support pour les logiciels propriétaires. Nvidia fournit toujours des pilotes fins (propriétaires) pour Linux, mais Ubuntu et d’autres distributions ne l’envoient pas. Il n'y a pas non plus d'interface de pilote binaire disponible pour Linux comme pour Windows. (Il existe un fichier texte appelé binaryApiNonsense.txt ou quelque chose dans les sources du noyau) Cela dit, seul le matériel Nvidia est correctement pris en charge sous Linux. Vous pouvez jouer à la plupart des jeux de logiciels d’identité avec le matériel Nvidia sous Linux.
La prochaine chose des outils de développement. MSFT fournit un excellent support C ++ et le débogueur Visual Studio est meilleur que gdb en ce qui concerne C ++. Last but not least, il manque d'autres outils tels que Photoshop. De plus, .net vous permet de créer rapidement des outils d’interface graphique. De nombreux studios de jeux codent leurs outils pour un usage interne à l'aide du framework .net.
J'avais presque oublié: le système graphique est affreux, à l'époque où ils portaient simplement X11, car c'était la solution la plus simple. Ils n’ont pas réussi à concevoir et à mettre en œuvre correctement un système graphique moderne que possèdent OSx et Win.
Hmm? Mes cartes intel et ati fonctionnent bien sous Linux ... Et quoi de mal avec X11? J'ai toujours pensé que c'était bien meilleur que les alternatives pour d'autres OS (en particulier Windows) à cause de son architecture client-serveur.
et si vous lisez la dernière phrase, Linus lui-même a implémenté le correctif au niveau du noyau - pas un correctif X11.
alternative le
1
Je ne connais pas grand-chose au système graphique (vous avez peut-être raison), mais dire que Linux a échoué en tant que système de bureau n’est pas vrai ou du moins inexact. Je suis passé de Windows à Linux et je me sens beaucoup plus productif depuis. Les performances de Linux sont et étaient supérieures à Windows sur toutes les machines que j'ai utilisées. De plus, je ne code pas en C ++ et je veux savoir où se situe Eclipse en tant qu'EDI C ++ par rapport à Visual Studio.
M.Sameer
Posez les lance-flammes. Je pense que l'opinion généralement acceptée est que VS est le meilleur IDE. Cependant, Eclipse est encore jeune et a encore beaucoup de chemin à parcourir - nous verrons. J'aime tout simplement avec quelle facilité tout est scriptable et pipeable dans Linux, cependant!
Réponses:
Beaucoup de réponses ici sont vraiment très bonnes. Mais le problème OpenGL et Direct3D (D3D) devrait probablement être résolu. Et cela nécessite ... une leçon d'histoire.
Et avant de commencer, j'en connais beaucoup plus sur OpenGL que sur Direct3D . Je n'ai jamais écrit une ligne de code D3D de ma vie et j'ai écrit des tutoriels sur OpenGL. Donc, ce que je vais dire n’est pas une question de partialité. C'est simplement une question d'histoire.
Naissance du conflit
Un jour, au début des années 90, Microsoft a regardé autour de lui. Ils ont vu la SNES et Sega Genesis être géniaux, avec beaucoup de jeux d’action et autres. Et ils ont vu DOS . Les développeurs ont codé les jeux DOS comme des jeux de console: directement sur du métal. Contrairement aux consoles cependant, où un développeur qui a créé un jeu SNES connaissait le matériel dont disposerait l'utilisateur, les développeurs DOS devaient écrire pour plusieurs configurations possibles. Et c'est plutôt plus difficile qu'il n'y paraît.
Et Microsoft avait un plus gros problème: Windows. Vous voyez, Windows voulait posséder le matériel, contrairement à DOS qui laissait les développeurs faire n'importe quoi. Posséder le matériel est nécessaire pour assurer la coopération entre les applications. La coopération est exactement ce que les développeurs de jeux détestent, car elle nécessite d’importantes ressources matérielles qu’ils pourraient utiliser pour devenir géniaux.
Afin de promouvoir le développement de jeux sous Windows, Microsoft avait besoin d’une API uniforme, de bas niveau, fonctionnant sous Windows sans être ralentie, et surtout multi-matériels . Une seule API pour tous les graphiques, le son et le matériel d'entrée.
Ainsi, DirectX est né.
Les accélérateurs 3D sont nés quelques mois plus tard. Et Microsoft a eu des ennuis. Voir DirectDraw, le composant graphique de DirectX, ne traitait que des graphiques 2D: allouer de la mémoire graphique et effectuer des mélanges de bits entre différentes sections de mémoire allouées.
Donc, Microsoft a acheté un peu de middleware et l'a transformé en Direct3D Version 3. Il a été universellement critiqué. Et avec raison. Regarder le code D3D v3, c'est comme regarder l'arche de l'alliance.
Le vieux John Carmack d'Id Software a jeté un coup d'œil à cette corbeille et a dit: "Fous ça!" et a décidé d'écrire vers une autre API: OpenGL.
Vous voyez, une autre partie de la bête aux multiples têtes que Microsoft avait été occupée à travailler avec SGI sur une implémentation OpenGL pour Windows. L'idée ici était de courtiser les développeurs d'applications GL typiques: les applications de poste de travail. Les outils de CAO, la modélisation, ce genre de chose. Les jeux étaient la chose la plus distante dans leur esprit. Il s’agissait principalement de Windows NT, mais Microsoft a également décidé de l’ajouter à Win95.
Afin d'attirer les développeurs de stations de travail vers Windows, Microsoft a décidé d'essayer de les corrompre en leur donnant accès à ces nouvelles cartes graphiques 3D. Microsoft a mis en œuvre le protocole Installable Client Driver: un fabricant de cartes graphiques pourrait remplacer l'implémentation logicielle OpenGL de Microsoft par une implémentation matérielle. Le code pourrait automatiquement utiliser une implémentation OpenGL matérielle, le cas échéant.
À l'origine, les cartes vidéo grand public ne prenaient pas en charge OpenGL. Cela n'a pas empêché Carmack de simplement porter Quake sur OpenGL (GLQuake) sur son poste de travail SGI. Comme on peut le lire dans le readme de GLQuake:
Ce fut la naissance des pilotes miniGL. Celles-ci ont finalement évolué vers des implémentations OpenGL complètes, à mesure que le matériel devenait suffisamment puissant pour implémenter la plupart des fonctionnalités OpenGL dans le matériel. nVidia a été le premier à proposer une implémentation OpenGL complète. De nombreux autres fournisseurs ont eu des difficultés, raison pour laquelle les développeurs ont préféré Direct3D: ils étaient compatibles avec une gamme plus étendue de matériel. Finalement, seuls nVidia et ATI (maintenant AMD) sont restés et les deux ont eu une bonne implémentation OpenGL.
OpenGL Ascendant
Ainsi, la scène est définie: Direct3D vs OpenGL. C'est vraiment une histoire incroyable, compte tenu de la gravité de D3D v3.
L’OpenGL Architectural Review Board (ARB) est l’organisation responsable de la maintenance de OpenGL. Ils émettent un certain nombre d'extensions, maintiennent le référentiel d'extensions et créent de nouvelles versions de l'API. L'ARB est un comité composé de nombreux acteurs de l'industrie graphique, ainsi que de fabricants de systèmes d'exploitation. Apple et Microsoft ont été à plusieurs reprises membres de l'ARB.
3Dfx sort avec le Voodoo2. C'est le premier matériel capable de faire du multitexturing, ce qu'OpenGL ne pouvait pas faire auparavant. Alors que 3Dfx était fermement opposé à OpenGL, NVIDIA, fabricant de la prochaine puce graphique multitexturation (la TNT1), a adoré. L'ARB a donc publié une extension: GL_ARB_multitexture, qui permettrait d'accéder au multitexturing.
Pendant ce temps, Direct3D v5 est sorti. Maintenant, D3D est devenu une API réelle , plutôt que ce qu'un chat pourrait vomir. Le problème? Pas de multitexturing.
Oops.
Maintenant, celui-ci ne ferait pas autant mal qu'il aurait dû, car les utilisateurs n'utilisaient pas beaucoup le multitexturing. Pas directement. Le multitexturing nuit beaucoup aux performances et, dans de nombreux cas, cela ne valait pas la peine comparé au multi-dépassement. Et bien sûr, les développeurs de jeux aiment faire en sorte que leurs jeux fonctionnent sur du matériel plus ancien, qui ne faisait pas appel au multitexturation, et de nombreux jeux livrés sans ce matériel.
D3D se voit donc accorder un sursis.
Le temps passe et NVIDIA utilise la GeForce 256 (pas la GeForce GT-250; la toute première GeForce), qui met pratiquement fin à la concurrence dans les cartes graphiques pour les deux prochaines années. Le principal argument de vente est la possibilité d'effectuer la transformation de sommet et l'éclairage (T & L) dans le matériel. De plus, NVIDIA a tellement aimé OpenGL que leur moteur T & L était effectivement OpenGL. Presque littéralement; si je comprends bien, certains de leurs registres prenaient en réalité directement les énumérateurs OpenGL comme valeurs.
Direct3D v6 est sorti. Multitexture enfin mais ... pas de matériel T & L. OpenGL avait toujours eu un pipeline T & L, même avant le 256, il était implémenté dans le logiciel. Il était donc très facile pour NVIDIA de convertir leur implémentation logicielle en solution matérielle. Ce ne serait pas avant D3D v7 avant que D3D ait enfin pris en charge le matériel T & L.
Aube des Shaders, crépuscule d'OpenGL
Ensuite, GeForce 3 est sorti. Et beaucoup de choses se sont passées en même temps.
Microsoft avait décidé qu'ils ne seraient plus en retard. Ainsi, au lieu de regarder ce que faisait NVIDIA et de le copier après coup, ils ont pris l’étonnante position de s’adresser à eux et de leur parler. Et puis ils sont tombés amoureux et ont eu une petite console ensemble.
Un divorce compliqué s'ensuivit plus tard. Mais c'est pour une autre fois.
Cela signifiait pour le PC que GeForce 3 était sorti simultanément avec D3D v8. Et il n’est pas difficile de voir comment GeForce 3 a influencé les shaders de D3D 8. Les pixel shaders de Shader Model 1.0 étaient extrêmement spécifiques au matériel de NVIDIA. Aucune tentative n'a été faite pour extraire le matériel de NVIDIA; SM 1.0 était exactement ce que la GeForce 3 faisait.
Lorsque ATI a commencé à se lancer dans la course aux cartes graphiques de performance avec la Radeon 8500, un problème est survenu. Le pipeline de traitement des pixels du 8500 était plus puissant que celui de NVIDIA. Ainsi, Microsoft a publié Shader Model 1.1, qui était essentiellement "Quoi que fasse le 8500".
Cela peut sembler être un échec de la part de D3D. Mais l'échec et le succès sont une affaire de degrés. Et un échec épique se produisait dans OpenGL-land.
NVIDIA aimait OpenGL, alors quand GeForce 3 est apparue, ils ont sorti de nombreuses extensions OpenGL. Extensions propriétaires OpenGL: NVIDIA uniquement. Naturellement, lorsque le 8500 est arrivé, il ne pouvait en utiliser aucun.
Voir, au moins dans D3D 8 Land, vous pouvez exécuter vos shaders SM 1.0 sur du matériel ATI. Bien sûr, vous deviez écrire de nouveaux shaders pour profiter de la fraîcheur du 8500, mais au moins votre code fonctionnait .
Afin d’avoir des shaders de tout type sur Radeon 8500 dans OpenGL, ATI devait écrire un certain nombre d’extensions OpenGL. Extensions propriétaires OpenGL: ATI uniquement. Il fallait donc un chemin de code NVIDIA et un chemin de code ATI, juste pour avoir des shaders .
Maintenant, vous pourriez demander: "Où était l'OpenGL ARB, qui était chargé de maintenir OpenGL à jour?" Là où beaucoup de comités finissent souvent par être stupides.
Vous voyez, j'ai mentionné ARB_multitexture ci-dessus parce que cela prend en compte tout cela. L'ARB semblait (du point de vue d'un étranger) vouloir éviter complètement l'idée de shaders. Ils ont estimé que s’ils plaçaient suffisamment de possibilités de configuration sur le pipeline à fonction fixe, ils pourraient égaler la capacité d’un pipeline de shader.
Donc, l'ARB a publié extension après extension. Chaque extension avec les mots "texture_env" était une nouvelle tentative de correction de cette conception vieillissante. Vérifiez le registre: entre les extensions ARB et EXT, huit de ces extensions ont été réalisées. Beaucoup ont été promus aux versions de base d'OpenGL.
Microsoft faisait partie de l'ARB à cette époque; ils sont partis à peu près au moment où D3D 9 a frappé. Il est donc tout à fait possible qu'ils travaillent à saboter OpenGL d'une manière ou d'une autre. Personnellement, je doute de cette théorie pour deux raisons. Premièrement, ils auraient dû obtenir l’aide d’autres membres de la CRÉA, car chaque membre n’avait qu’une voix. Et plus important encore, l'ARB n'a pas eu besoin de l'aide de Microsoft pour tout gâcher. Nous verrons d'autres preuves de cela.
Finalement, ARB, probablement sous la menace d'ATI et de NVIDIA (deux membres actifs), a finalement tiré la tête assez longtemps pour fournir de véritables shaders de type assemblage.
Tu veux quelque chose d'encore plus stupide?
Matériel T & L. Quelque chose avait été ouvert par OpenGL . Eh bien, c'est intéressant. Pour tirer le maximum des performances possibles de T & L matériel, vous devez stocker vos données de sommet sur le GPU. Après tout, c’est le GPU qui souhaite utiliser vos données de sommet.
Dans D3D v7, Microsoft a introduit le concept de mémoire tampon Vertex. Ce sont des bandes de mémoire GPU allouées pour stocker les données de sommet.
Vous voulez savoir quand OpenGL a obtenu son équivalent? Oh, NVIDIA, étant un amoureux de tout ce qui concerne OpenGL (tant qu’il s’agit d’extensions propriétaires NVIDIA), a publié l’extension de la plage de sommets au moment de la première utilisation de la GeForce 256. Mais quand l'ARB a-t-il décidé de fournir une fonctionnalité similaire?
Deux ans plus tard . C'était après qu'ils aient approuvé les shaders de vertex et de fragment (pixel en langage D3D). C’est le temps qu’a pris l’ARB à développer une solution multiplate-forme pour stocker les données de vertex dans la mémoire du processeur graphique. Là encore, T & L a besoin de matériel pour atteindre des performances optimales.
Une langue pour tous les ruiner
L’environnement de développement OpenGL a donc été fracturé pendant un certain temps. Pas de shaders cross-hardware, pas de stockage de vertex GPU cross-hardware, alors que les utilisateurs de D3D ont profité des deux. Cela pourrait-il empirer?
Tu ... tu pourrais dire ça. Entrez 3D Labs .
Qui sont-ils, vous pourriez demander? C’est une entreprise disparue que je considère comme le véritable tueur d’OpenGL. Bien sûr, l’inefficacité générale de l’ARB a rendu OpenGL vulnérable alors qu’il aurait dû posséder D3D. Mais 3D Labs est peut-être la principale raison qui me fait penser à l'état actuel du marché d'OpenGL. Qu'est-ce qu'ils auraient pu faire pour causer ça?
Ils ont conçu le langage de masquage OpenGL.
Vous voyez, 3D Labs était une entreprise mourante. Leurs GPU onéreux étaient marginalisés par la pression croissante de NVIDIA sur le marché des stations de travail. Et contrairement à NVIDIA, 3D Labs n’était pas présent sur le marché grand public; si NVIDIA gagnait, ils mourraient.
Ce qu'ils ont fait.
Ainsi, dans le but de rester pertinents dans un monde qui ne voulait pas de leurs produits, 3D Labs s'est présenté à une conférence de développeurs de jeux avec des présentations pour ce qu'ils ont appelé "OpenGL 2.0". Ce serait une réécriture complète de l’API OpenGL à partir de zéro. Et cela a du sens; L'API d'OpenGL était très cruelle à l'époque (note: cette crue existe toujours). Il suffit de regarder comment le chargement et la liaison des textures fonctionnent. c'est semi-arcanique.
Une partie de leur proposition était un langage ombré. Naturellement. Cependant, contrairement aux extensions ARB multi-plateformes actuelles, leur langage d’ombrage était «de haut niveau» (C est un niveau élevé pour un langage d’ombrage. Oui, vraiment).
Maintenant, Microsoft travaillait sur son propre langage d’ombrage de haut niveau. Dans l’ensemble de l’imaginaire collectif de Microsoft, ils ont appelé le langage HLSL (High Level Shading Language). Mais leur approche des langues était fondamentalement différente.
Le plus gros problème avec le langage de shader de 3D Labs était qu'il était intégré. Voir, HLSL était un langage défini par Microsoft. Ils ont publié un compilateur et généré un code d'assemblage Shader Model 2.0 (ou des modèles de shader ultérieurs), que vous alimenteriez dans D3D. Dans les jours D3D v9, HLSL n'a jamais été directement touché par D3D. C'était une belle abstraction, mais c'était purement facultatif. Et un développeur a toujours eu l’occasion de passer derrière le compilateur et d’ajuster le résultat pour obtenir des performances maximales.
Le langage 3D Labs n'avait rien de tout cela. Vous avez donné au conducteur le langage semblable à C et cela a produit un shader. Fin de l'histoire. Pas un assembleur, pas quelque chose qui nourrit autre chose. L'objet OpenGL réel représentant un shader.
Cela signifiait que les utilisateurs d'OpenGL étaient ouverts aux caprices des développeurs qui venaient de se familiariser avec la compilation de langages de type assembleur. Les bogues du compilateur ont été généralisés dans le GLSL (OpenGL Shading Language) récemment baptisé. Pire, si vous réussissiez à faire compiler correctement un shader sur plusieurs plates-formes (ce qui n'est pas une mince affaire), vous restiez soumis aux optimiseurs du jour. Lesquelles n'étaient pas aussi optimales qu'elles pourraient l'être.
Bien que c’était la plus grande faiblesse de GLSL, ce n’était pas la seule. De loin .
Dans D3D et dans les langages d'assemblage plus anciens d'OpenGL, vous pouvez mélanger et assortir des shaders de vertex et de fragment (pixel). Tant qu'ils communiquent avec la même interface, vous pouvez utiliser n'importe quel vertex shader avec n'importe quel fragment compatible. Et il y avait même des niveaux d'incompatibilité qu'ils pouvaient accepter; un vertex shader pourrait écrire un résultat que le fragment shader n'a pas lu. Et ainsi de suite.
GLSL n'avait rien de tout cela. Les shaders de vertex et de fragment ont été fusionnés dans ce que 3D Labs a appelé un "objet programme". Donc, si vous voulez partager des programmes de sommets et de fragments, vous devez créer plusieurs objets de programme. Et cela a causé le deuxième plus gros problème.
Vous voyez, 3D Labs pensait qu'ils étaient intelligents. Ils ont basé le modèle de compilation de GLSL sur C / C ++. Vous prenez un fichier .c ou .cpp et le compilez dans un fichier objet. Ensuite, vous prenez un ou plusieurs fichiers objet et les liez dans un programme. C'est ainsi que GLSL se compile: vous compilez votre shader (sommet ou fragment) en un objet shader. Ensuite, vous placez ces objets shader dans un objet programme et vous les liez ensemble pour former votre programme réel.
Bien que cela ait permis des idées intéressantes potentielles comme avoir des shaders "de bibliothèque" contenant du code supplémentaire que les shaders principaux pouvaient appeler, cela signifiait en pratique que les shaders étaient compilés deux fois . Une fois au stade de la compilation et une fois au stade de la liaison. Le compilateur de NVIDIA en particulier était connu pour exécuter essentiellement la compilation deux fois. Cela n'a pas généré une sorte d'intermédiaire de code objet; il l'a juste compilé une fois et a jeté la réponse, puis l'a compilé à nouveau au moment de la liaison.
Ainsi, même si vous souhaitez lier votre vertex shader à deux fragments différents, vous devez effectuer beaucoup plus de compilation que dans D3D. D'autant que la compilation d'un langage de type C a été réalisée hors ligne , et non au début de l'exécution du programme.
Il y avait d'autres problèmes avec GLSL. Peut-être semble-t-il erroné de blâmer 3D Labs, puisque l'ARB a finalement approuvé et incorporé le langage (mais rien de plus de son initiative "OpenGL 2.0"). Mais c'était leur idée.
Et voici la partie vraiment triste: 3D Labs avait raison (principalement). GLSL n’est pas un langage d’ombrage à base de vecteur comme HLSL l’était à l’époque. En effet, le matériel de 3D Labs était un matériel scalaire (similaire au matériel NVIDIA moderne), mais ils étaient finalement dans la même direction que de nombreux fabricants de matériel.
Ils avaient raison de choisir un modèle de compilation en ligne pour un langage de "haut niveau". D3D a même opté pour cela.
Le problème était que 3D Labs avait raison au mauvais moment . Et en essayant d'appeler trop tôt l'avenir, en essayant d'être à l'épreuve du futur, ils ont écarté le présent . Cela ressemble à la manière dont OpenGL a toujours eu la possibilité d’utiliser la fonctionnalité T & L. Sauf que le pipeline T & L d'OpenGL était toujours utile avant le matériel T & L, tandis que GLSL était un passif avant que le monde ne le rattrape.
GLSL est une bonne langue maintenant . Mais pour le moment? C'était horrible. Et OpenGL en a souffert.
Tomber vers l'apothéose
Bien que je maintienne que 3D Labs a porté le coup fatal, c’est l’ARB lui-même qui enfoncerait le dernier clou dans le cercueil.
C'est une histoire dont vous avez peut-être entendu parler. À l'époque d'OpenGL 2.1, OpenGL rencontrait un problème. Il y avait beaucoup d'héritage cruel. L'API n'était plus facile à utiliser. Il y avait 5 façons de faire les choses, et aucune idée de ce qui était le plus rapide. Vous pouvez "apprendre" OpenGL avec de simples tutoriels, mais vous n'avez pas vraiment appris l'API OpenGL qui vous donnait des performances et une puissance graphique réelles.
Ainsi, l'ARB a décidé de tenter une autre réinvention d'OpenGL. Cela ressemblait à "OpenGL 2.0" de 3D Labs, mais c'était mieux car ARB était derrière. Ils l'appelaient "Longs Peak".
Pourquoi est-il si difficile de prendre un peu de temps pour améliorer l'API? C'était mauvais parce que Microsoft s'était laissé vulnérable. Voir, ce fut au moment du passage Vista.
Avec Vista, Microsoft a décidé d’apporter certaines modifications indispensables aux pilotes d’affichage. Ils ont obligé les pilotes à se soumettre au système d'exploitation pour la virtualisation de la mémoire graphique et diverses autres choses.
Bien que l’on puisse en débattre sur le bien-fondé ou sur la possibilité de le faire, il n'en reste pas moins que Microsoft considère D3D 10 comme étant Vista (et supérieur) uniquement. Même si votre matériel était compatible avec D3D 10, vous ne pouvez pas exécuter d’applications D3D 10 sans exécuter également Vista.
Vous vous souviendrez peut-être aussi que Vista ... hum, disons simplement que cela n'a pas bien fonctionné. Vous disposiez donc d’un système d’exploitation sous-performant, d’une nouvelle API qui ne fonctionnait que sur ce système d’exploitation et d’une nouvelle génération de matériel nécessitant cette API et ce système d’exploitation pour être plus rapide que la génération précédente.
Cependant, les développeurs pouvaient accéder aux fonctionnalités D3D 10-class via OpenGL. Eh bien, ils le pourraient si la CRÉA n’avait pas été occupée par Longs Peak.
Fondamentalement, la CRÉF a consacré un bon travail d’une année et demie à deux ans à améliorer l’API. Au moment où OpenGL 3.0 est sorti, l'adoption de Vista était terminée, Win7 était sur le point de laisser Vista derrière eux, et la plupart des développeurs de jeux ne se souciaient de toute façon pas des fonctionnalités de la classe D3D-10. Après tout, le matériel D3D 10 exécutait parfaitement les applications D3D 9. Et avec la montée en puissance des ports de console à console (ou de développeurs de PC qui se lancent dans le développement de consoles. Faites votre choix), les développeurs n’avaient pas besoin de fonctionnalités D3D 10.
Désormais, si les développeurs avaient déjà accès à ces fonctionnalités via OpenGL sur des machines WinXP, le développement OpenGL aurait peut-être reçu un coup de pouce bien nécessaire. Mais les ARB ont raté leur chance. Et voulez-vous connaître le pire?
Bien qu'ils aient passé deux précieuses années à tenter de reconstruire l'API à partir de zéro ... ils ont quand même échoué et sont simplement revenus au statu quo (à l'exception d'un mécanisme de dépréciation).
Ainsi, non seulement la CRÉA a raté une fenêtre d'opportunité cruciale , mais elle n'a même pas accompli la tâche qui lui a fait perdre de vue cette occasion. Quasiment épique échouer tout autour.
Et c'est l'histoire d'OpenGL contre Direct3D. Une histoire d'opportunités manquées, de stupidité flagrante, d'aveuglement volontaire et de folie simple.
la source
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).
LOLled pendant plus de 6 minutes à cela.J'ai trouvé étrange que tout le monde se concentre sur la base d'utilisateurs, lorsqu'il s'agit de «développeurs de jeux», pas de «rédacteurs de jeux».
Pour moi, en tant que développeur, Linux est un foutoir. Il y a tellement de versions, de gestionnaires de bureau, de kits d'interface utilisateur, etc. Si je ne veux pas distribuer mon travail en open source, l'utilisateur peut (essayer de) le recompiler de manière à ce qu'il corresponde à sa combinaison unique de paquets, bibliothèques et paramètres, c'est un cauchemar !
D'autre part, Microsoft fournit (la plupart du temps) une incroyable compatibilité ascendante et une stabilité de plate-forme. Il est possible de cibler toute une gamme de machines avec un programme d'installation à source fermée, par exemple des ordinateurs exécutant Windows XP, Vista et des versions 7, 32 et 64 bits, sans les redistribuables DX ou VC appropriés, etc.
Une dernière chose, s’IL VOUS PLAÎT TOUT LE MONDE SUR INTERNET ARRÊTEZ COMPARANT OPENGL ET DIRECTX! Comparez Direct3D à OpenGL ou ne le faites pas . DirectX prend en charge les entrées, le son, la lecture de films, etc., contrairement à OpenGL.
la source
C'est parce qu'il y a plus d'utilisateurs Windows sur la planète que Linux et Mac. La vérité est que les gens fabriquent des produits pour le marché le plus important.
La même chose vaut pour les téléphones mobiles: Android et iPhone ont des jeux impressionnants, mais Windows Mobile et Symbian ne ...
la source
Comme Windows détient plus de 90% du marché et que Linux (puisque vous avez spécifiquement posé des questions sur Linux) a la réputation de compter de nombreux utilisateurs qui n’aiment pas payer pour un logiciel. Que ce soit vrai ou non, c'est sans importance; la perception est là et influence les décisions des gens.
la source
Windows étant soutenu par une énorme organisation, il y a plus de dix ans, ils ont décidé qu'ils souhaitaient que le développement de jeux se fasse sur leur plate-forme .
Ce n'était pas vrai pour le Mac, et ce n'est pas vrai maintenant. Pas même pour iOS. Apple ne fournit pas d'outils pour le développement de jeux iOS. Mais c'est un marché énorme (il y a plus d'iPhones que de PC en 1995) avec relativement peu de concurrence, donc les gens le font quand même.
Pour ce qui est de Linux, il n’ya même pas une sorte d’institution centrale qui puisse définir une quelconque priorité. La direction dans laquelle Linux évolue est davantage déterminée par un groupe de très bons programmeurs, mais légèrement déréglés.
Pour créer un jeu PC aujourd'hui, vous avez besoin de beaucoup d'artistes 2D / 3D, de concepteurs de jeux, de scénaristes, d'acteurs, de testeurs, etc. En ce qui concerne la programmation réelle, vous pouvez simplement utiliser un moteur de jeu réel (CryEngine, Unreal Engine, Quake Engine, Source Engine). Donc, vous pourrez peut-être faire le tout sans aucun programmeur réel.
Pour cette raison, et en raison de la nature des entreprises, les programmeurs n’ont pas grand-chose à dire sur la plate-forme choisie. Et, de manière générale, les responsables recherchent un support, ce que Microsoft prétend proposer, et traitent des problèmes qui peuvent en quelque sorte être saisissants pour leurs modèles de pensée, contrairement à l'open source.
Pour cette raison, la plupart des logiciels commerciaux destinés aux utilisateurs finaux sont développés sous Windows.
Je travaille pour une entreprise qui crée des jeux flash et qui n'est donc pas liée à une plate-forme particulière. Cependant, nous développons tous sous Windows, car la plupart des outils que nous utilisons ne sont pas disponibles pour Linux.
la source
Comme certains l’ont déjà dit, la partie la plus importante est la base d’utilisateurs. 95% des utilisateurs de PC utilisent Windows. Les joueurs sur PC utilisent presque exclusivement Windows. Même ceux qui utilisent Mac ou Linux exécutent le plus souvent des jeux Windows via une virtualisation ou une émulation (à de très rares exceptions près).
Mais la démographie n'est pas tout. Je ne sous-estimerais pas le rôle de Microsoft pour rendre la plate-forme plus attrayante pour les développeurs de jeux. En gros, vous avez accès à un ensemble d’outils complet et gratuit , principalement à XNA Game Studio . Cela permet non seulement le développement pour Windows, mais également pour la Xbox 360 . Et avec la dernière édition, même pour les téléphones WP7. Évidemment, comme c'est un outil Microsoft, il utilise DirectX, pas OpenGL.
la source
Ewwww, je pas. J'utilise presque exclusivement Linux. Je double-amorçage sur Windows pour créer des versions de Windows et utiliser les versions de Mac pour les versions de Mac, mais c'est tout.
Le truc, c'est un framework multiplateforme que nous avons développé au fil des ans. Nos jeux sont construits à partir de cela et se comportent de manière identique dans Linux / OpenGL, Mac / OpenGL et Windows / Direct3D (et bientôt dans iOS / OpenGL).
Certes, ma société ne fabrique pas de titres AAA, elle ne s’applique donc peut-être pas à ces jeux, mais nous réalisons des jeux tout à fait décontractés (voir site Web - CSI: NY, Murder She Wrote et les deux prochaines publications en 2011 sont des exemples de titres utilisant des licences importantes, The Les affaires perdues de Sherlock Holmes 1 et 2 ont également été couronnées de succès)
Je n'abandonnerais jamais gedit + gcc + gdb + valgrind.
la source
De nos jours, Linux est plus une curiosité en matière de développement de jeux et la plupart des développeurs feraient mieux d’utiliser fiscalement une version de port OS X avant une version de Linux (voir des choses comme Steam). Même dans ce cas, le marché des consoles vaut plus que ces deux plates-formes combinées pour les jeux ...
Si vous vouliez utiliser une plateforme mono, DirectX convient. Si vous voulez être multi-plateforme, il y a de fortes chances que vous deviez utiliser OpenGL sur au moins certaines des autres plates-formes.
la source
La réponse est évidente. L’écriture d’un jeu a pour objectif de gagner de l’argent. De plus en plus d'utilisateurs finaux utilisent Windows, par conséquent, le marché est plus important et vous vous attendez à gagner plus d'argent avec un jeu Windows qu'avec un jeu Linux. C'est si simple.
Si jamais vous vous posez la question "Pourquoi quelqu'un fait-il ...", rappelez-vous que l'argent fait tourner le monde.
la source
Outils, outils, outils.
C'est ce que cela revient à. Développez sur Windows et accédez à certains des meilleurs outils de développement de la planète. Rien ne vient même à distance proche du débogueur de Visual Studio, les runtime de débogage de DirectX sont géniaux, PIX est génial, et des équivalents comparables n'existent tout simplement pas sur d'autres plates-formes / API. Bien sûr, il y a quelques bonnes choses là-bas; Je ne dis pas que les outils sur d'autres plates-formes sont mauvais, mais ceux fournis par MS sont tellement en avance sur le peloton (exception honorable: Valgrind) qu'ils ne sont même pas drôles.
En bout de ligne, ces outils vous aident. Ils vous aident à faire avancer les choses, ils vous aident à être productif, ils vous aident à vous concentrer sur les erreurs dans votre propre code plutôt que de vous battre avec une API qui ne se comporte jamais comme prévu.
la source
J'ai donc passé en revue toutes ces réponses et, en tant que développeur de jeux disposant de code sur des jeux de console déjà installés sur des tablettes Walmart, j'ai une réponse très différente.
Distribution.
Vous voyez, si vous voulez être sur une console Nintendo, vous devez obtenir la permission de Nintendo, acheter dans les usines de Nintendo, payer les frais généraux de Nintendo, négocier avec Walmart, traiter avec l'entreposage, vous avez besoin d'argent pour fabriquer, imprimer, imprimer des boîtes , faire toutes les assurances, et cetera.
Si vous voulez sur la XBox, bien sûr, il y a XBLA, mais vous avez toujours besoin de la bénédiction de Microsoft, vous devez attendre votre tour, il faut des dizaines de milliers de dollars pour publier un correctif, etc.
Sur iOS, vous avez toujours besoin de l'accord d'Apple, et ils peuvent (et le font) vous tirer de manière capricieuse.
Sur Steam, vous avez toujours besoin de l'autorisation de Valve ou de feu vert, ainsi que de beaucoup d'argent.
.
Sur Windows? Vous configurez un site Web et un bouton de téléchargement.
.
Je ne dis pas que les autres plates-formes ne sont pas utiles. Mais il y a tellement * de * choses horribles qui se passent lorsque vous essayez de développer un jeu, que pour moi, la promesse de pouvoir gifler un fichier binaire sur un site et de se concentrer sur le travail - au moins pour commencer - réduit vraiment beaucoup d'obstacles d'échec potentiels.
"Nous pouvons faire le portage XBLA plus tard, quand les choses seront stables".
Et dans une moindre mesure, cela convient également pour Linux, et si sept clients sont bons, vous pouvez commencer par là.
Mais Windows présente trois avantages considérables: un développement réellement ouvert, un déploiement réellement ouvert et une base de clients très vaste et très active qui s’intéresse aux produits bizarres.
Il est difficile d’imaginer où je préférerais commencer.
la source
Je pense que vous devriez en savoir plus sur l'histoire de DirectX et cet article .
Je pense que MS a choisi DX plutôt que OpenGL parce qu’ils aiment inciter les gens à utiliser leur propre système d’exploitation.
la source
Beaucoup de choses ont à voir avec la politique et le contrôle. À la fin des années 90, SGI et MS ont convenu d'associer leurs efforts:
http://en.wikipedia.org/wiki/Fahrenheit_graphics_API
SGI a beaucoup investi dans le projet, mais pas MS. SGI avait besoin de MS plus que de MS avait besoin de SGI. Le reste est de l'histoire.
D3D et OpenGL sont deux API très différentes, il appartient au développeur de choisir celle qui répond le mieux à vos besoins.
la source
Tout simplement parce que Linux a terriblement échoué en tant que système de bureau. Comme quelqu'un l'a souligné précédemment, Linux est un gâchis pour les développeurs (bibliothèques différentes, kits d'outils utilisateur, etc.)
Un autre problème est le freetardism et le manque de support pour les logiciels propriétaires. Nvidia fournit toujours des pilotes fins (propriétaires) pour Linux, mais Ubuntu et d’autres distributions ne l’envoient pas. Il n'y a pas non plus d'interface de pilote binaire disponible pour Linux comme pour Windows. (Il existe un fichier texte appelé binaryApiNonsense.txt ou quelque chose dans les sources du noyau) Cela dit, seul le matériel Nvidia est correctement pris en charge sous Linux. Vous pouvez jouer à la plupart des jeux de logiciels d’identité avec le matériel Nvidia sous Linux.
La prochaine chose des outils de développement. MSFT fournit un excellent support C ++ et le débogueur Visual Studio est meilleur que gdb en ce qui concerne C ++. Last but not least, il manque d'autres outils tels que Photoshop. De plus, .net vous permet de créer rapidement des outils d’interface graphique. De nombreux studios de jeux codent leurs outils pour un usage interne à l'aide du framework .net.
J'avais presque oublié: le système graphique est affreux, à l'époque où ils portaient simplement X11, car c'était la solution la plus simple. Ils n’ont pas réussi à concevoir et à mettre en œuvre correctement un système graphique moderne que possèdent OSx et Win.
la source