Que fait GLEW et pourquoi en ai-je besoin?
Ok, donc je sais déjà pourquoi J'ai besoin de GLEW, mais seulement jusqu'à un certain point.
Si j'utilise des éléments OpenGL modernes, probablement à partir de la version 3.0, et/ou que j'utilise le profil de base, alors GLEW est requis car sans elle, une erreur de compilation telle que glGenVertexArrays
n'a pas été déclarée.
Donc GLEW fait un peu de travail de fond, y compris les fonctions OpenGL modernes que nous aimerions utiliser, probablement.
En dehors de cela, fait-il autre chose? Aussi, comment ça fonctionne.
Comme un exemple, améliore-t-il la compilation multi-plateforme? (Nécessite moins de modifications au code si vous passez de Linux à Windows ou OS X Par exemple?
Est-ce qu'il a également amélioré le "multi-plateforme-ness" du matériel graphique? Par exemple, disons que nous avions deux ordinateurs identiques, y compris le système d'exploitation. Un programme est compilé en utilisant les commandes OpenGL 4.3 sur un système. Si l'autre système a une carte graphique ou un pilote qui ne supporte que OpenGL 3.3, GLEW aide-t-il à cela? (Compilation de shaders pour un plus ancien version D'OpenGL, peut-être?)
Donc vous pouvez probablement voir que je ne sais pas vraiment ce que GLEW fait ou comment il le fait.
Un dernier point; est-ce que quelqu'un sait comment utiliser GLEW avec GLFW? Je pourrais poster cela comme une question distincte en fait.
2 réponses
GLEW n'est pas 'requis', comme vous le dites. Vous pourriez utiliser glcorearb.h en-tête, ou quelque chose comme ça. Cependant, si vous liez avec une fonction-elle doit exister sur la plate-forme cible, ou votre programme ne serait pas lancé. GLEW et d'autres sont exactement pour gérer cela-vous ne liez pas directement avec les fonctions GL, mais obtenez plutôt des pointeurs de fonction après la phase d'initialisation. Il vous permet de vérifier à l'exécution quelles extensions sont présentes et quelles fonctions peuvent être utilisées.
La seule chose qu'il aide à la portabilité est d'obtenir des pointeurs de fonction-il peut être wglGetProcAddress / glxGetProcAddress et il est analogique pour les systèmes d'exploitation apple. Donc non, ce n'est pas un cas. Cependant, la variété des extensions GL disponibles est.
GLEW ne nécessite aucun point de contact avec votre bibliothèque d'initialisation GL préférée-appelez simplement glewInit après avoir créé le contexte GL.
Pour initialiser correctement glew un contexte OpenGL doit être créé et wglMakeCurrent()
doit être appelé avant d'appeler glewInit();
Je mettrais cela dans les commentaires de la réponse de keltar, mais je ne vois pas comment.