Quelles alternatives à GLUT existent?

12

J'essaie d'apprendre OpenGL, et je viens de découvrir que GLUT est obsolète . Je connais déjà SDL, et il semble que ce soit une bonne alternative. Dois-je utiliser SDL pour développer des jeux avec OpenGL, ou existe-t-il de meilleures alternatives. Je suis nouveau dans le développement de jeux, donc je ne sais pas grand chose sur l'état de l'art.

Mansuro
la source

Réponses:

27

Je viens de découvrir que GLUT est obsolète.

C'est ce qui se passe lorsque vous acceptez la première réponse que vous rencontrez; vous obtenez de mauvaises informations. GLUT 3.7 ne devrait pas être utilisé, mais FreeGLUT est complètement rétrocompatible avec lui.

Cependant, votre question va ailleurs. Pour créer un jeu réel, GLUT de forme * est inapproprié. Cela ne vous donne pas le contrôle de la boucle principale, et vous en avez vraiment besoin dans un jeu (FreeGLUT a un moyen de contrôler la boucle principale, mais c'est toujours étrange). GLUT est destiné à l'écriture de démos graphiques. C'est très important lors du test de nouveaux effets graphiques, il devrait donc être présent dans votre boîte à outils en cas de besoin. Mais votre code de jeu principal ne devrait jamais l'utiliser.

GLFW est une alternative légère centrée sur le jeu à GLUT. Il fournit un support de base pour des choses au-delà de la création d'une fenêtre OpenGL. Il vous permet d'obtenir des entrées, de charger des images sous forme de textures et quelques autres choses.

SDL , SFML et Allegro 5 sont tous des kits d'outils multimédias. Ils peuvent créer des fenêtres OpenGL, mais ils font bien plus que cela. Ils fournissent un support complet pour l'entrée, l'audio et divers autres éléments dont vous avez besoin pour créer un jeu. Si vous créez un jeu, n'importe lequel d'entre eux est un bon point de départ. Personnellement, j'aime Allegro 5, mais c'est juste mon parti pris pour une bonne documentation et une API propre.

Nicol Bolas
la source
1
À quoi servent les titres AAA (à la fois sur PC uniquement et sur plusieurs plates-formes)? Les utilisent-ils (GLFW, Allegro) que vous avez mentionnés pour gérer la fenêtre opengl? ou ils écrivent leur propre «tout» à partir de zéro?
Quazi Irfan
@iamcreasy: "Titres AAA" (je déteste vraiment ce terme) n'utilisez aucun d'entre eux. En général, ils n'utilisent rien d'open-source. Ils pourraient, mais s'ils veulent utiliser une bibliothèque, ils préfèrent de loin utiliser une bibliothèque qui est prise en charge. Il existe quelques exceptions comme ODL ou Bullet. Mais ce sont des exceptions plutôt que la règle.
Nicol Bolas
Depuis quand GLFW «charge-t-il les images sous forme de textures»? Certainement pas dans la liste des fonctionnalités; ni aucune fonction qui remplit cet objectif à distance dans mon en-tête glfw.
deceleratedcaviar
1
L'autre gros inconvénient de GLUT est que son modèle d'entrée n'est pas particulièrement bien adapté aux jeux; il n'y a aucun moyen d'obtenir des codes clés bruts ou d'obtenir des événements de presse / relâchement sur les touches de modification elles-mêmes (par exemple en utilisant ctrl comme bouton de tir), ni de moyen d'obtenir le contexte GL sous-jacent (qui est nécessaire pour activer vsync sur X11, par exemple).
moelleux
1
@NicolBolas ah, j'ai oublié la 2.7, elles [threads, images] ont été déclarées «hors contexte» pour la version GLFW 3.0.
deceleratedcaviar
2

Si votre objectif est de développer un jeu,

Cela dépend si vous voulez que votre jeu soit multiplateforme ou non. Pour les jeux portables (Windows, Mac, Linux), SDL semble être le seul choix.

Si vous ne ciblez que Windows et / ou XBox, il existe de bien meilleures alternatives, par exemple XNA qui vous évite d'écrire beaucoup de code manuellement.

Si votre objectif est d'apprendre OpenGL,

Il suffit de programmer en OpenGL brut, mais préparez-vous à affronter de nombreux concepts peu intuitifs, des mathématiques et d'énormes manuels.

Mischa Arefiev
la source
Comme l'a dit Takumi, il existe également SFML en tant que bibliothèque portable. Mieux que SDL à mon humble avis (il est plus à jour.)
kaoD
8
-1: "Pour les jeux portables (Windows, Mac, Linux), SDL semble être le seul choix." Ce n'est même pas vrai à distance. SFML et Allegro 5 existent tous deux en tant qu'alternatives parfaitement valides, et les deux ont des bases de plateforme plus larges.
Nicol Bolas
1

GLUT est à la fois une API et une bibliothèque. La bibliothèque d'origine est en effet obsolète. L'API est quelque chose de différent, c'était assez bien pour commencer, il a juste besoin de révisions pour surmonter les limitations et répondre aux nouveaux besoins. La principale implémentation actuelle est FreeGLUT, qui est prise en charge et non obsolète. Cela signifie qu'une bonne alternative à GLUT (comme dans la bibliothèque GLUT) est GLUT (comme dans FreeGLUT).

Le problème noté ci-dessus avec le "contrôle de la boucle principale" est incorrect. Avec les nouvelles versions de GLUT, vous pouvez mieux contrôler votre boucle de jeu (si cela est important pour vous). La limitation a été fixée par glutMainLoopEvent (). Cette limitation et d'autres sont traitées ici:

http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit

Ingemar Ragnemalm
la source
" Avec les nouvelles versions de GLUT, vous pouvez mieux contrôler votre boucle de jeu (si cela est important pour vous). " C'est un jeu, alors oui , c'est important pour vous. En outre, ce glutMainLoopEventn'est guère une bonne façon de gérer la boucle principale. Il utilise toujours un modèle événementiel pour vous alimenter en données, plutôt qu'un modèle d'interrogation où vous obtenez les données que vous voulez quand vous le souhaitez.
Nicol Bolas
Je dois affirmer que le modèle piloté par les événements est plus efficace que l'interrogation, sauf si vous interrogez les données stockées à partir des événements (ce qui est très bien). Les ressources du système d'interrogation doivent être effectuées avec soin.
Ingemar Ragnemalm
0

Qt prend en charge OpenGL. Jetez un œil à Open Inventor et demandez-vous si cela vous semble logique d'aller directement à une API 3D de niveau supérieur.

FxIII
la source