Есть ли простой способ открыть одно (или много) окно opengl в Mac OS X с C ++? - PullRequest
3 голосов
/ 06 января 2011

Да, я ненавижу Objective-c, плюс мой проект будет переносимым, поэтому я хотел бы закодировать как можно больше кода на C ++, в идеале 100%.
Итак, у меня есть обычный проект C ++, созданный с помощью Xcode, и я хочу открыть несколько окон OpenGL.

edit: Черт, Glut берет на себя управление приложением с помощью glutMainLoop (), и я хотел бы иметь больше контроля над циклом.
Попробую freeglut, хотя я не могу найти двоичные файлы OSX, и мне всегда не повезло, когда я пытаюсь скомпилировать чужой код.

Обновление:
Я попытался еще раз связать с SDL 1.3, и на этот раз я смог заставить его работать! Ю-ху!
Я всегда хотел работать с SDL, но использование более одного окна было обязательным, и это особенность версии 1.3, которая находится в стадии разработки, и я никогда не мог заставить ее работать.
Поскольку он переносим на миллионы ОС и обрабатывает 2D-графику, а также OpenGL, я пойду с этим. Спасибо всем!

Ответы [ 4 ]

3 голосов
/ 06 января 2011

Если вы не хотите использовать target-c, вам придется использовать либо устаревшие углеродные библиотеки, X11, либо другую библиотеку, например GLUT, для создания окна.Если переносимость вызывает беспокойство, либо пройдите маршрут GLUT, либо вам нужно написать собственный код управления окном для каждой платформы, которую вы хотите поддерживать.

Если вы не пойдете по маршруту GLUT, вам потребуетсянапишите код управления окнами для каждой операционной системы, поэтому я настоятельно рекомендую вам прикусить пулю и написать управление окнами в target-c ++.Единственное, что вам действительно нужно знать, это то, что указатель - это всегда указатель, независимо от того, на каком языке он находится, поэтому просто сохраняйте объективные идентификаторы как void * и приводите их обратно к идентификаторам, на самом деле все получается довольно просто.

2 голосов
/ 06 января 2011

GLUT отлично работает для вашей заявленной цели, хотя вы, вероятно, захотите для него хорошую оболочку C ++.В итоге я взломал свой собственный, и, хотя GLUT не подходит для упаковки, это было выполнимо.

РЕДАКТИРОВАТЬ: Так как у вас есть проблема с glutMainLoop (), вы можете пытаться сделать больше, чем предназначалось GLUT - он в основном предназначен для хаков, разовых проектов и демонстраций opengl.И Freeglut не компилирует OOB на Mac, по крайней мере, это был мой опыт.

Для портативного, более полнофункционального приложения Qt может быть подходящим вариантом для вас.В противном случае, разработайте свой C ++ для переносимости и используйте тонкий слой GUI на каждой платформе.Если запуск чего-либо на каждой платформе является наиболее важным, перейдите к первому.Если лучший пользовательский опыт на каждой платформе является наиболее важным, перейдите на последнюю.Вы можете обнаружить, что «худой» не самый описательный термин для того, что вовлечено.

Я нашел эту демонстрацию полезной для работы простого окна Cocoa / OpenGL, хотя в коде есть несколько нелепых ошибок: http://developer.apple.com/library/mac/#samplecode/CocoaGL/Introduction/Intro.html

2 голосов
/ 06 января 2011

Я думаю, NeHe учебники может помочь;

1 голос
/ 17 декабря 2014

Этот вопрос был задан более 3 лет назад, но остается довольно свежим.Недавно я прошел аналогичное упражнение по планированию школьной программы и пытался выяснить, какая лучшая портативная библиотека для работы на Mac / Windows / Linux / mobile с проектами OpenGL.Возможно, мои заметки помогут кому-то принять решение.Я упоминаю только те варианты main , которые я рассмотрел.

API более высокого уровня , для управления окнами, плюс дополнительные полезности, такие как спрайты, шрифты, звуки, обработка событий и т. Д .:

  • SFML и github repo : nice & tidy, C ++, объектно-ориентированная библиотека, изначально интегрируемая с OpenGL.Переносимость для управления окнами и контекстами OpenGL 3.3 из коробки на MacOS, Win и Linux.Мобильная поддержка предоставляется в ветке 2.2 (github).
  • SDL2 : поддерживаются все основные платформы, включая мобильные.С контекстом OpenGL нужно как-то управлять вручную, поэтому использование GLEW, например, очень удобно (см. Ниже).Чуть ниже уровня SFML.

API нижнего уровня , в основном для управления окнами и контекстом OpenGL:

  • GLWF : Это в значительной степени замена GLUT для современного OpenGL.Довольно низкий уровень, но переносимый через: Win, OSX, Lin.В активной разработке.
  • GLEW : я упоминаю это только для полноты.Он не управляет окнами, но помогает управлять контекстами OpenGL, и вы можете использовать его вместе с GLWF или SDL, например.

Другие:

  • Freeglut : продолжение с открытым исходным кодом GLUT.Подходит для небольших демонстрационных проектов.Я не использовал это сам, но видел хорошие документы и демонстрационный код.В активной разработке.
  • GLUT: старый, снят с производства.Устаревшие демки и код по сети.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...