web-dev-qa-db-fra.com

Construire glew pour Mac OSX

J'ai passé la journée à lutter pour que mon moteur simple fonctionne sur Mac. J'ai SDL qui fonctionne et maintenant la seule chose qui pose problème est opengl. Le moteur utilise opengl moderne (basé sur un shader) et nécessite donc GLEW. J'ai tout essayé de fink à MacPorts pour l'installer et rien ne fonctionne.

Le plus grand succès que j'ai eu a été de le construire à partir de la source. J'ai d'abord eu une erreur disant 'GL/glu.h' no such file or directory found. J'ai donc renommé les inclusions en OpenGL/glu.h et qui a résolu ce problème. Mais maintenant, je reçois cette erreur ld: unknown option: -shared Je suis complètement bloqué à ce stade.

Je préfère également une version statique si quelqu'un sait comment le faire.

17
DavidColson

Le moteur utilise opengl moderne (basé sur un shader) et nécessite donc GLEW

GLEW n'est pas une condition préalable à l'utilisation des fonctionnalités OpenGL modernes. Il s'agit de la méthode a pour charger des fonctionnalités étendues, et non la d'une seule. Vous êtes sur MacOS X donc, le système d'extension vous est de toute façon peu utile, car la version OpenGL prise en charge est entièrement déterminée par le système d'exploitation et le framework disponible. Apple développe les pilotes OpenGL eux-mêmes et les extensions qu'ils fournissent ne sont que celles qui sont pour des fonctionnalités non trouvées dans la spécification OpenGL (c'est-à-dire spécifiques au fournisseur et EXT). Tout ce dont vous avez besoin est une version de la Le framework OpenGL est assez nouveau, tout MacOS X sorti après 2006 peut le faire.

14
datenwolf

Vous pouvez utiliser Homebrew pour faire le travail pour vous:

brew install glew
29
yihangho

Mise à jour 20180912 - n'utilisez pas GLEW. Ça ne vaut pas la peine ...


J'ai installé GLEW à partir de la source en utilisant:

make GLEW_DEST = "$ HOME/local" OPT = "- march = core2 -O2" install.all

Vos optimisations et destinations peuvent varier. Cela donne un libGLEW.a, libGLEWmx.a et leurs homologues dylib dans $HOME/local/lib. Le sous-répertoire pkgconfig comprendra également glew.pc. GLEW ne joue pas toujours bien avec les autres non plus. Devoir définir des globaux comme glewExperimental, ainsi que faire attention à l'ordre d'inclusion des autres en-têtes: <OpenGL/gl3.h> ou <glfw.h>, etc.

Si je peux offrir quelques conseils - oubliez SDL pour la programmation moderne GL. Si vous voulez entrer dans pure, modern GL = sur OS X. - considérez quelque chose comme:

#if defined (__Apple_CC__)
#include <OpenGL/gl3.h>
#else
#include <GL/gl3.h>       /* assert OpenGL 3.2 core profile available. */
#endif

#define GLFW_INCLUDE_GL3  /* don't drag in legacy GL headers. */
#define GLFW_NO_GLU       /* don't drag in the old GLU lib - unless you must. */

#include <GL/glfw.h>      /* simple and easy to use. omit legacy GL. */

L'installation de GLFW est également assez simple:

> env PREFIX = "$ HOME/local" CFLAGS = "- march = core2 -O2" make cacoa cocoa-dist-install

Encore une fois, vos paramètres peuvent différer.


20160412: Mes commentaires sur SDL sont obsolètes, comme d'autres l'ont souligné. Surtout si vous travaillez sur un autre moteur. Je maintiens que glfw3 est un moyen plus facile de créer des applications OpenGL modernes sur OSX. C'est du code très bien écrit et maintenu, avec un focus (correct!) Étroit sur GL et la gestion des événements. Évidemment, du point de vue du "moteur", SDL2 fournit des API vidéo étendues portables, des API audio , les API de thread, etc. Bien qu'avec C11 et C++ 11, même une couche d'abstraction d'API de thread est peut-être redondante.

GLEW est problématique dans la mesure où il ne peut pas gérer plusieurs contextes sans intervention intensive de l'utilisateur. Ce n'est pas un problème pour OSX, qui fournit une API de profil de base et n'a pas besoin de charger des "points de fonction". IIRC, GL on X (DRI?) A cela aussi - mais je peux me tromper à ce sujet. Il y a d'autres chargeurs là-bas. J'attends toujours que l'un d'eux les règle tous, garantit que différentes pointeurs de fonctions sont chargés pour plusieurs contextes si nécessaire, et utilise un thread local (ou même une clé pthread) pour une répartition correcte, qui peut être générée à partir du dernier gl.xml de Khronos, ou de quiconque ...


20180912

Je pense que l'approche la plus simple à l'heure actuelle est d'utiliser GLFW pour fournir un contexte, et d'utiliser HEUREUX pour résoudre GL pointeurs de fonction. Le seul inconvénient est qu'il n'y a pas de gestion efficace de multiples contextes GL. C'est ce que GLFW utilise actuellement dans ses démos ... J'oublierais complètement GLEW à ce stade.

5
Brett Hale

MacPorts devrait installer ces bibliothèques et leurs dépendances pour vous:

Sudo port install glew +universal
Sudo port install libsdl +universal

Lors de la construction de votre jeu, il est préférable d'appeler g ++ pour les étapes de construction et de liaison; il vous suffit de vous référer à /opt/local pour qu'il trouve les en-têtes et les bibliothèques qui ont été installés par MacPorts. Vous pouvez également lier statiquement les fichiers .a si vous le souhaitez:

g++ -c -O3 -I/opt/local/include main.cpp -o main.o
g++ main.o /opt/local/lib/libSDL.a /opt/local/lib/libSDLmain.a /opt/local/lib/libGLEW.a -o mygame

Si vous construisez à partir de la ligne de commande, je recommande en utilisant un Makefile et en construisant avec make .

4
Raptor007

Je recommanderais d'aller sur http://glew.sourceforge.net et de télécharger le fichier Zip directement sur votre Mac. Ensuite, allez dans le Finder et saisissez glew.h pour voir le fichier, contrôlez-le, obtenez des informations et copiez le chemin d'accès au fichier. Ensuite, allez dans votre fichier de programme respectif (par exemple, commons.h) qui contient le #include <GL/glew.h> dépendance, et changez-le en:

#include <path/to/file/that/you/just/copied/glew.h>  

Ensuite, essayez de compiler à nouveau votre programme, et cette fois vous ne devriez pas obtenir d'erreurs GLEW.

2
warship

Aucune des réponses ci-dessus ne m'a donné ce que je cherchais: un moyen rapide de configurer et de projet Xcode avec une dépendance Glew statique.

  1. Téléchargez la source GLEW d'ici http://glew.sourceforge.net/
  2. Type

    $Sudo make install 
    

    à partir du répertoire décompressé (cela installe le .dylib si vous souhaitez créer un lien dynamique). Vous devez avoir installé CMake.

  3. Copiez la bibliothèque statique .a depuis/usr/local/lib/vers votre projet XCode
  4. Mettez à jour les "Chemins de recherche d'en-tête" dans vos paramètres de construction Xcode pour que votre cible inclue les en-têtes (généralement placés dans/usr/local/include). Ou copiez simplement les en-têtes dans votre propre projet.
1
clearwater82