Pour quelle version d'OpenGL dois-je coder, compte tenu des considérations de compatibilité et de performances? [fermé]

19

Lorsque la spécification OpenGL est mise à jour, ils n'ajoutent que des fonctionnalités. Donc, en théorie, le matériel le plus récent et le plus performant avec la prise en charge des profils de base et de compatibilité devrait fonctionner très bien avec le vieux code OpenGL1.1. Cela s'est avéré être vrai. J'ai passé 12 mois à apprendre OpenGL1.1 et je l'ai bien compris.

J'ai lu quelques chapitres d'un de ces nouveaux livres OpenGL4.2. Presque toutes les fonctionnalités sur lesquelles je m'appuie ont été dépréciées (comme les listes d'affichage), ce qui me permet de supposer qu'il existe de meilleures façons de faire toutes ces choses.

Considérons que 1.1 est susceptible d'être pris en charge, dans son intégralité, par TOUS les matériels modernes. 1.1 est sorti en 1992. Je ne code pas à la dure juste pour prendre en charge des PC de 20 ans. :-p Je pense qu'il est raisonnable de supposer que la plupart des joueurs utilisent un matériel qui atteint environ 5 ans de milieu de gamme.

Je pense que les nouvelles méthodes sont conçues pour être universellement l'une des deux choses: plus performantes ou plus faciles à coder. J'ai lu quelque part que ce n'est jamais les deux! XD

Quelle version d'OpenGL est la plus largement prise en charge par un matériel de ~ 5 ans? Quelle version est la plus logique à utiliser, compte tenu de ces considérations?

Suds
la source

Réponses:

19

Compte tenu de vos considérations, j'ai ensuite sauté pour voir quand les spécifications OpenGL pour chaque version ont été publiées et j'ai également pris en compte un aperçu général de ce que j'ai vu.

OpenGL 3, qui a introduit les FBO, les VAO et d'autres choses, a été publié le 11 juillet 2008, il y a presque 5 ans. Bien sûr, vous ne pouvez pas vous attendre à ce que toutes les cartes après cette date aient immédiatement OpenGL 3 disponible.

En examinant le Steam Hardware Survey , 40% sont DirectX 10. Comme OpenGL 3 nécessitait une carte graphique similaire, il est généralement sûr de supposer que la plupart des cartes DirectX 10 peuvent exécuter au moins OpenGL 3.

OpenGL 3 est pris en charge sur les cartes depuis la série GeForce 8xxx, qui étaient assez populaires si je me souviens bien. Il est également intéressant de noter que les graphiques Intel HD 2000 et 3000 (pont Sandy) ne prennent en charge que OpenGL 3, alors gardez cela à l'esprit si vous prévoyez de les cibler.

Conclusion: OpenGL 3 est un bon pari (rappelez-vous également que la plupart des joueurs, selon votre public cible, auront probablement un meilleur matériel que la moyenne).

DMan
la source
C'est une excellente réponse. C'était exactement le genre de renseignements que je cherchais.
Suds
3
"Il est également intéressant de noter que les graphiques Intel HD 2000 et 3000 (Sandy bridge) ne prennent en charge que jusqu'à OpenGL 3" Remarque: ils ne prennent en charge que GL 3.1 (car Intel s'en fiche). Et comme il s'agit d'Intel, le «support» doit être pris avec un grain de sel. Leur matériel pourrait prendre en charge la 3.3, mais ils ne l'exposent pas (car encore une fois, ils s'en moquent). J'éviterais d'utiliser OpenGL 3.x sur du matériel Intel. En effet, j'éviterais de faire quoi que ce soit basé sur un shader sur du matériel Intel.
Nicol Bolas
La question se pose alors; Quelle est la saturation du marché avec le matériel Intel? Cela vaut-il la peine de ne pas se soucier des graphiques Intel et d'utiliser OpenGL3.x de toute façon? Ou y a-t-il suffisamment de matériel graphique Intel pour vraiment compter?
Suds
1
Un problème est OSX. La dernière version 10.7.x ne prend en charge que OpenGL 3.2 , 10.6.x ne prend en charge que 3.0 (ou peut-être même 2.x). 10.5.x varie considérablement en fonction de la carte, 1.3, 1.5 et 2.0 sont des possibilités. Ces systèmes seront bloqués pour toujours sur ces versions d'OpenGL à moins que l'utilisateur ne paie de l'argent à Apple pour une mise à jour. Il n'y a pas de mise à jour du pilote de carte vidéo ou tel pour OSX qui mettra à jour OpenGL. D'autres problèmes sont certains des chipsets Intel intégrés utilisés dans les netbooks. Beaucoup d'entre eux ne sont qu'OpenGL 2.0 ou pire.
David C. Bishop
Et puis vous avez la 3DS, qui fait toujours
vibrer
8

Je commencerais ici: http://store.steampowered.com/hwsurvey

Je ne viserais pas une période de temps autant qu'un pourcentage d'utilisateurs, par exemple, si vous ciblez 4 cpus, vous n'atteindrez que 45% des utilisateurs, mais si vous travaillez à 2, vous obtiendrez près de 90%

salmonmoose
la source
1
Où avez-vous vu OpenGL? Je ne vois que DirectX (ce qui est intéressant à noter si vous prévoyez de ne cibler que Windows).
DMan
Je suppose que vous faites les démarches basées sur la panne de la carte graphique
Jimmy
Oui - je n'ai rien vu sur OpenGL - mais vous pouvez l'obtenir à partir des modèles de cartes, ou bien, je pense qu'il y aurait une bonne corrélation entre les versions de DirectX et OpenGL.
salmonmoose
3

La réponse dépend du fait que vous ayez besoin ou non d'exécuter des graphiques Intel publiés dans le délai que vous avez mentionné.

Si vous le faites, limitez-vous à OpenGL 2.1 (ou même 1.5), si vous ne le faites pas, alors 3.x semble raisonnable.

Oui, les anciennes versions d'OpenGL fonctionnent toujours, et oui, d'un point de vue, elles peuvent sembler plus simples. Lorsque les choses se déforment, c'est lorsque vous essayez de faire des choses (et vous le ferez) qu'elles ne supportent pas trop facilement. OpenGL 1.1 n'est pas seulement un moyen difficile - c'est souvent le moyen impossible si vous voulez obtenir certains résultats.

Maximus Minimus
la source
Il me vient à l'esprit que je devrais ajouter un exemple des raisons pour lesquelles 1.1 est souvent impossible. Un tel qui peut être facilement lié à la fonctionnalité 1.1 est plusieurs passes de mélange. Parce que vous n'avez pas de FBO et que vous êtes principalement limité à 8 bits par textures de composant, vous constaterez que lorsque le mélange passe, vous commencez à perdre de la précision. Utilisez 3/4/5 passes et le résultat final commencera à ressembler (ou pire que) aux graphiques 16 bits ou 8 bits. Pourtant, plusieurs passes sont souvent nécessaires pour simuler des effets de niveau supérieur (le multitexturing de base serait celui que nous connaissons tous) avec un ensemble de fonctionnalités 1.1.
Maximus Minimus
Même les graphiques Intel HD (Sandy / Ivy Bridge) ne prennent en charge que OpenGL 3.1, et cela fait un an. Il s'agit de savoir si vous souhaitez prendre en charge des ordinateurs portables bon marché (ou à faible consommation).
Steve Howard
2
@SteveHoward: Intel HD Graphics peut prendre en charge OpenGL 4. source
Janus Troelsen
Cet article date d'environ 3 mois après la publication de mon commentaire.
Steve Howard
1

Tout d'abord, les choses OpenGL 1.1 comme les listes d'affichage fonctionneront toujours dans un nouveau contexte à condition que vous ayez le profil de compatibilité (ce qui est généralement le cas). Le seul problème est que si vous prévoyez de porter sur OpenGL ES, l'une des bibliothèques graphiques spécifiques à la console (elles sont généralement supprimées OpenGL similaire à OpenGL ES) ou même WebGL (ce qui nécessiterait de toute façon un peu de retravail).

Personnellement, je recommanderais d'utiliser des shaders de vertex / fragment et des VBO. Ils existent depuis assez longtemps et offrent de grandes améliorations de performances. Vous pourriez probablement même fournir une solution de rechange simple si vous encapsulez les fonctions dans une classe.

Vous pouvez également être en mesure d'émuler des choses comme les objets de tableau de sommet.

David C. Bishop
la source
0

Avec du matériel vieux de 5 ans, certaines personnes utilisent toujours XP. Et cela signifie que vous ne pouvez même pas coder avec DirectX 10 ou OpenGL 3. Et OpenGL 3 a beaucoup de fonctionnalités dont vous pourriez vraiment bénéficier, comme les tampons de cadre et autres. Honnêtement, je bousculerais un peu votre configuration système afin que vous puissiez inclure ces fonctionnalités.

Avi
la source
8
-1: "Avec du matériel vieux de 5 ans, certaines personnes utilisent toujours XP. Et cela signifie que vous ne pouvez même pas coder avec DirectX 10 ou OpenGL 3." Pas vrai. OpenGL 3.x fonctionne très bien sous XP. Seul D3D10 est limité à XP, pour des raisons d'API / pilote. Cela n'a rien à voir avec le matériel.
Nicol Bolas
0

Il est courant pour les logiciels 3D d'avoir des chemins de code à la fois pour une version d'API graphique "de base" et une version d'API "la plus récente et la meilleure".

Les versions graphiques de base courantes sont D3D9 et OpenGL 2.1 / GLSL 120 .. qui manquent tous les deux de shaders de géométrie car l'ancien matériel ne les prend pas en charge.

Une autre option de base est ANGLE, qui est GLES 2.0 plus EGL qui fonctionne sur D3D9, OpenGL de bureau et GLES 2.0 mobile. C'est le back-end pour Google Chrome et Webgl dans Chrome et Firefox.

http://code.google.com/p/angleproject/

Quant à la "dernière et la meilleure" version que vous choisissez, c'est plus difficile. Les API et le matériel les plus récents que vous ciblez, les meilleures fonctionnalités que vous pouvez prendre en charge, mais uniquement sur le matériel le plus récent et le plus performant.

David Jeske
la source