Подтвердить что ты не робот

Планирование строительства для Mac OSX

Я потратил этот день, пытаясь заставить мой простой движок работать на Mac. У меня работает SDL, и теперь единственное, что беспокоит, - это opengl. Двигатель использует современный opengl (основанный на шейдере) и поэтому требует GLEW. Я пробовал все: от fink до MacPorts, чтобы установить его, и ничего не работает.

Самый успешный опыт, который у меня был, заключался в его создании из источника. Сначала я получил сообщение об ошибке 'GL/glu.h' no such file or directory found. Итак, я переименовал include в OpenGL/glu.h и исправил эту проблему. Но теперь я получаю эту ошибку ld: unknown option: -shared. Я полностью застрял в этой точке.

Также Id скорее статическая сборка, если кто-то знает, как это сделать.

4b9b3361

Ответ 1

Двигатель использует современный opengl (основанный на шейдере), поэтому для этого требуется GLEW

GLEW не является обязательным условием для использования современных функций OpenGL. Это метод a для загрузки расширенной функциональности, а не только один. Вы находитесь на MacOS X, поэтому система расширения для вас все равно не нужна, потому что поддерживаемая версия OpenGL полностью определяется ОС и доступной инфраструктурой. Apple разрабатывает сами драйверы OpenGL, а расширения, которые они предоставляют, - это только те, которые предназначены для функций, не найденных в спецификации OpenGL (например, для конкретного поставщика и EXT). Все, что вам нужно, это новая версия OpenGL Framework. Любой MacOS X, выпущенный после 2006 года, может это сделать.

Ответ 2

Вы можете использовать Homebrew, чтобы выполнить вашу работу:

brew install glew

Ответ 3

MacPorts должен установить эти библиотеки и их зависимости:

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

При построении вашей игры лучше всего называть g++ для шагов построения и компоновки; вам просто нужно обратиться к /opt/local, чтобы найти заголовки и библиотеки, которые были установлены MacPorts. Вы также можете статически связывать файлы .a, если хотите:

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

Если вы строите из командной строки, я рекомендую использовать Makefile и создать с помощью make.

Ответ 4

Я установил GLEW из источника, используя:

сделать GLEW_DEST = "$ HOME/local" OPT = "- march = core2 -O2" install.all

Ваши оптимизации и назначения могут отличаться. Это дает libGLEW.a, libGLEWmx.a и их dylib-копии в $HOME/local/lib. Подкаталог pkgconfig также включает glew.pc. GLEW не всегда хорошо играет с другими. Необходимо установить глобальные переменные типа glewExperimental, а также быть осторожным с порядком включения других заголовков: <OpenGL/gl3.h> или <glfw.h> и т.д.

Если я могу предложить несколько советов - забудьте SDL для современного программирования GL. Если вы хотите попасть в чистый, современный GL на OS X. - рассмотрите что-то вроде:

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

Установка GLFW также довольно проста:

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

Опять же, ваши настройки могут отличаться.


20160412: Мои комментарии относительно SDL устарели, как указывали другие. Особенно, если вы работаете над еще одним двигателем. Я утверждаю, что glfw3 - это более простой способ сделать современные приложения OpenGL на OSX. Он очень хорошо написан и поддерживается кодом, с (правильно!) Узким фокусом на GL и обработки событий. Очевидно, что с точки зрения "двигателя" SDL2 предоставляет портативные расширенные видео API, аудио API, API потоков и т.д. Хотя с C11 и С++ 11 даже слой абстракции нитей API, возможно, является избыточным.

GLEW проблематично в том, что он не может обрабатывать несколько контекстов без широкого вмешательства пользователя. Это не проблема для OSX, которая предоставляет API-интерфейс основного профиля и не требует загрузки "функциональных точек". IIRC, GL на X (DRI?) Тоже есть, но я могу ошибаться. Есть другие погрузчики. Я все еще жду, чтобы один из них правил для всех, что гарантирует, что указатели различных функций загружаются для нескольких контекстов, если это необходимо, и использует поточно-локальный (или даже ключ pthread) для правильной отправки, которые могут быть сгенерированы из последнего gl.xml от Khronos, или кто бы...

Ответ 5

Я бы рекомендовал перейти http://glew.sourceforge.net и загрузить ZIP файл прямо на ваш Mac. Затем зайдите в Finder и введите glew.h, чтобы увидеть файл, нажмите его, получите информацию и скопируйте путь к файлу. Затем перейдите в свой файл программы (например, commons.h), который содержит зависимость #include <GL/glew.h>, и измените его на:

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

Затем попробуйте снова скомпилировать свою программу, и на этот раз вы не должны получать никаких ошибок GLEW.

Ответ 6

Ни один из вышеперечисленных ответов не дал мне то, что я искал: быстрый способ настройки и проект Xcode со статической зависимостью Glew.

  • Загрузите источник GLEW здесь http://glew.sourceforge.net/
  • Тип

    $sudo make install 
    

    из распакованного каталога (это устанавливает .dylib, если вы хотите динамически связывать). Вы должны установить CMake.

  • Скопируйте статическую библиотеку .a из/usr/local/lib/в проект XCode.
  • Обновите "Пути поиска заголовков" в настройках сборки Xcode, чтобы ваша цель включала заголовки (обычно помещаемые в /usr/local/include ). Или просто скопируйте заголовки в собственный проект.