2012-09-01 23 views
12

He pasado el día luchando para que mi motor simple funcione en Mac. Tengo SDL funcionando y ahora lo único que causa problemas es opengl. El motor usa opengl moderno (basado en sombreador) y por lo tanto requiere GLEW. He intentado de todo, desde fink a MacPorts para instalarlo y nada funciona.Building glew para Mac OSX

El mayor éxito que he tenido ha sido construirlo desde la fuente. Primero recibí un error que decía 'GL/glu.h' no such file or directory found. Así que renombré el include a OpenGL/glu.h y eso solucionó ese problema. Pero ahora recibo este error ld: unknown option: -shared Estoy completamente atascado en este punto.

También Id más bien una compilación estática si alguien sabe cómo hacerlo.

+0

Sugeriría usar un sistema de puertos como macports, fink, homebrew ya que los autores habrán hecho el trabajo de portar el proceso de compilación a OSX. En este caso, el enlazador OSX no comprende -compartió, así que necesita usar su equivalente y habrá varios otros problemas – Mark

+0

, ya que dije que utilicé Macports y dijo que había tenido éxito, pero no hay nada instalado – Constan7ine

+1

¿Qué hizo 'sudo port install glew' dar como un error? – Mark

Respuesta

11

El motor utiliza OpenGL moderna (shader basado) y por lo tanto requiere GLEW

GLEW no es un requisito previo para el uso de las funciones de OpenGL modernas. Es un método para cargar funcionalidad extendida, no el solo uno. Estás en MacOS X, por lo que el sistema de extensión es de poca utilidad para ti, porque la versión de OpenGL admitida está totalmente determinada por el sistema operativo y el marco disponible. Apple desarrolla los controladores OpenGL por su cuenta y las extensiones que proporcionan son solo aquellas que corresponden a funciones que no se encuentran en la especificación OpenGL (por ejemplo, proveedor específico y EXT). Todo lo que necesita es una versión del Framework OpenGL lo suficientemente nueva. Cualquier MacOS X lanzado después de 2006 puede hacerlo.

+1

¿Cómo se transporta un programa que incluye GLEW para compilar en OS X? – Efren

+2

@Efren: compruebe la macro del preprocesador '__APPLE__' y solo si esa * no * se ha definido incluya el encabezado GLEW. Y para el caso en que se define '__APPLE__', defina macros (vacías) que conviertan las llamadas a funciones 'glew ...' en no-ops. – datenwolf

+0

Entonces, cuando no se incluye el encabezado GLEW, ¿qué encabezado Apple está disponible? Quiero decir, el viejo programa realmente llama a esas funciones. – Efren

3

He instalado GLEW usando desde el código fuente usando:

hacer GLEW_DEST = "$ HOME/local" OPT = "- march = Core2 -O2" install.all

Sus optimizaciones y destinos puede variar. Esto produce un libGLEW.a, libGLEWmx.a, y sus contrapartes dylib en $HOME/local/lib. El subdirectorio pkgconfig también incluirá glew.pc. GLEW no siempre juega bien con los demás tampoco. Tener que establecer variables globales como glewExperimental, así como la necesidad de tener cuidado con el orden de inclusión de otras cabeceras: <OpenGL/gl3.h> o <glfw.h>, etc.

Si puedo ofrecer algunos consejos - olvidemos SDL para la programación GL moderna. Si desea ingresar a pure, GL moderno en OS X. - considerar algo como:

#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. */ 

Instalación GLFW es bastante fácil también:

> env prefix = "$ HOME/local" CFLAGS = "- march = Core2 -O2" hacer cacao cacao dist-install

Nuevamente, su configuración puede variar.


20160412: Mis comentarios acerca de SDL están fuera de fecha, como otros han señalado. Particularmente si estás trabajando en otro motor. Sigo diciendo que glfw3 es una forma más fácil de hacer aplicaciones OpenGL modernas en OSX. Está muy bien escrito y mantenido código, con un enfoque (correctamente!) Estrecho en GL y manejo de eventos. Obviamente, desde una perspectiva de 'motor', SDL2 proporciona API de video extendidas, API de audio, API de subprocesos portátiles, etc. Aunque con C11 y C++ 11, incluso una capa de abstracción de API de subprocesos quizás sea redundante.

GLEW es problemático porque no puede manejar contextos múltiples sin una amplia intervención del usuario. Esto no es un problema para OSX, que proporciona una API de perfil central y no necesita cargar 'puntos de función'. IIRC, GL en X (¿DRI?) Tiene esto también, pero podría estar equivocado al respecto. Hay otros cargadores por ahí. Todavía estoy esperando uno que los gobierne a todos, lo que garantiza que los diferentes punteros de las funciones se carguen para contextos múltiples si es necesario, y utiliza un subproceso local (o incluso una clave pthread) para el despacho correcto, que se puede generar desde el último gl .xml de Khronos, o quien sea ...

+6

"Olvídese de SDL para la programación OpenGL moderna". Este comentario ahora está desactualizado. SDL2 le permite especificar la versión del contexto de OpenGL. –

+1

Como alguien que trabaja en un proyecto de hobby que usa OpenGL y SDL, es difícil desarrollar una buena comprensión del panorama de OpenGL. Estoy usando SDL2 con OpenGL, y estoy tratando de cargar sombreadores por primera vez. Sin embargo, es difícil decir qué versión de OpenGL estoy usando. ¿Puede (@mlabbe o de otro modo) sugerir algún recurso que pueda ayudar con esto? En general, encuentro tutoriales estrechos. – michaelgulak

+0

Recomiendo la revisión de OpenGL superbible que corresponde a la versión de OpenGL a la que apunta. Se centra en el perfil central, que elimina las llamadas heredadas. Esto es mucho más efectivo que Google al azar. http://docs.gl/ también es útil para hacer coincidir llamadas a versiones. –

4

DarwinPorts deben recibir esas bibliotecas y sus dependencias instaladas para usted:

sudo port install glew +universal 
sudo port install libsdl +universal 

Cuando la construcción de su juego, lo mejor es llamar g ++ tanto para el edificio y los pasos que unen ; solo necesita consultar /opt/local para encontrar los encabezados y bibliotecas que han sido instalados por MacPorts. También puede enlazar estáticamente los archivos .a si lo desea:

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 usted está construyendo desde la línea de comandos, recomiendo using a Makefile and building with make.

20

Puede utilizar Homebrew para hacer el trabajo para usted:

brew install glew 
+2

Entonces, ¿qué? Soy totalmente nuevo en esto y estoy tratando de hacer que esto funcione. La instalación se completó, pero aún no tengo ni idea de qué hacer a continuación. –

+0

http://stackoverflow.com/a/17601607/5442132 – miqdadamirali

+0

@RafaelEyng después de esto, escriba su código en say 'main.cpp' luego compile usando' clang ++ main.cpp -lGLEW -framework OpenGL -o '(y si usa otras bibliotecas, puede agregar '-lglfw3 -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo'). –

2

recomendaría ir a http://glew.sourceforge.net y descargar el archivo ZIP a la derecha en su Mac. Luego vaya al Buscador y escriba glew.h para ver el archivo, haga clic en él, obtenga información y copie la ruta al archivo. A continuación, vaya a su respectivo archivo de programa (por ejemplo, commons.h) que contiene la dependencia #include <GL/glew.h>, y cambiarlo a:

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

a continuación, tratar de compilar el programa de nuevo, y esta vez no debe recibir ningún GLEW errores

0

Ninguna de las respuestas anteriores me dio lo que estaba buscando: una forma rápida de configurar y Xcode proyecto con una dependencia estática de Glew.

  1. Descargar fuente GLEW de aquí http://glew.sourceforge.net/
  2. Tipo

    $sudo make install 
    

    desde el directorio descomprimido (esto instala el .dylib si desea enlazar dinámicamente). Necesitas tener CMake instalado.

  3. Copiar la biblioteca estática .a desde/usr/local/lib/a su proyecto XCode
  4. actualización de las "Rutas de búsqueda de cabecera" en los valores de creación de Xcode para su objetivo para incluir los encabezados (por lo general se coloca en/usr/local/include). O simplemente copie los encabezados en su propio proyecto.