web-dev-qa-db-fra.com

Pourquoi SDL et OpenGL sont-ils liés?

Je jouais avec SDL et j'ai découvert que vous ne pouvez pas faire pivoter les images avec SDL. Partout où la question a été posée, les gens ont dit d'utiliser OpenGL pour faire la rotation. J'ai toujours pensé que SDL était complètement séparé d'OpenGL, ai-je tort de penser cela? J'ai même trouvé des tutoriels pour utiliser OpenGL dans SDL, ce qui m'a encore plus dérouté. Quelle est exactement la relation entre SDL et OpenGL? Pourquoi ne pas simplement utiliser OpenGL s'il est plus puissant et vous permet d'en faire plus (d'après ce que j'ai lu)?

47
Devan Buggay

SDL est une bibliothèque multimédia multiplateforme conçue pour fournir un accès de bas niveau à l'audio, au clavier, à la souris, au joystick, etc. Elle prend également en charge le matériel 3D via OpenGL.

OpenGLest une spécification standard définissant une API multi-langage et multiplateforme pour l'écriture d'applications qui produisent des graphiques informatiques 2D et 3D . L'interface comprend plus de 250 appels de fonction différents qui peuvent être utilisés pour dessiner des scènes tridimensionnelles complexes à partir de primitives simples. OpenGL a été développé par Silicon Graphics Inc. (SGI) en 1992 [4] et est largement utilisé en CAO, réalité virtuelle, visualisation scientifique, visualisation d'informations et simulation de vol. Il est également utilisé dans les jeux vidéo, où il est en concurrence avec Direct3D sur les plates-formes Microsoft Windows (voir OpenGL vs Direct3D).

25
karlphillip

SDL est une couche au-dessus d'OpenGL; en fait, il utilise GDI sur Windows par défaut et possède également un backend DirectX. Les gens disent probablement que vous pouvez utiliser OpenGL pour contourner les limitations de SDL sur les plates-formes qui par défaut utilisent OpenGL (ahem, Linux) car l'abstraction de niveau supérieur n'expose pas cette fonctionnalité. Cependant, votre code est "moins" portable pour Windows (ou au moins Windows utilisant le GDI backend) ).

De plus, SDL fait beaucoup d'autres choses en plus des graphiques - audio, entrée, etc. qu'OpenGL ne fait pas.

15
J Trana

SDL gère l'entrée, la création de fenêtres, le chargement d'images et plusieurs autres fonctionnalités qu'OpenGL ne gère pas.

6
SurvivalMachine

SDL utilise OpenGL comme moteur de rendu matériel pour le contenu qui souhaite un rendu matériel sur certaines plates-formes. Si vous disposez d'une telle plateforme, OpenGL est l'API sous-jacente sur laquelle SDL est une abstraction.

6
Puppy

À propos de votre exemple de rotation des graphiques: il est préférable de le faire avec OpenGL (c'est-à-dire accéléré par le matériel) qu'avec SDL lui-même (c'est-à-dire sur le processeur) car il est généralement gourmand en calcul (surtout si vous avez beaucoup de bitmaps pour faire pivoter chaque image et vous voulez que l'effet soit lisse).

Cependant, rien (à part la raison) ne vous empêche d'utiliser le package SDL_gfx qui a le module SDL_rotozoom responsable de la rotation et de la mise à l'échelle des bitmaps.

5
Kos

Comme l'ont dit de nombreuses personnes. SDL gère bien plus que le rendu. En plus de gérer l'audio, l'entrée et tous les autres trucs sympas, cela rend l'utilisation des graphiques plus simple en vous donnant accès à de nombreuses fonctions que vous auriez besoin de mettre en œuvre par vous-même autrement.
Alors oui, SDL est une couche d'abstraction au-dessus d'OpenGL. Vous pouvez toujours accéder à OpenGL dans votre application et donc utiliser sa pleine puissance.
Un ajout simple, car vous semblez être nouveau dans ce type d'API: si vous voulez une API similaire à SDL (pour les graphiques 2D), je peux recommander de jeter un œil à [~ # ~] sfml [~ # ~] . Il est basé sur C++ au lieu de C a des fonctions pour des choses comme la rotation. Il est également basé sur OpenGL. :)

3
Skalli