glutInitContextVersion() отсутствует в библиотеке перенасыщений

Я практикую некоторый код opengl, однако, когда я хочу заставить контекст opengl использовать определенную версию opengl через glutInitContextVersion(), он завершает процесс компиляции и выдает это сообщение: -

использование необъявленного идентификатора 'glutInitContextVersion'

я хочу исправить эту проблему, поэтому я максимально упростил свой код

код

#include "File.h"
#include <GLUT/GLUT.h>
#include <OpenGL/OpenGL.h>

using namespace std;

int  main ()
{

    glutInitContextVersion(3,2);

    return 1;
}

Однако я смог использовать другие функции перегрузки без каких-либо сообщений об ошибках или предупреждений

Я запускаю Xcode 4.4.1 на Macbook air с OS X 10.9.1.


person BulBul    schedule 26.02.2014    source источник


Ответы (3)


Разработка GLUT завершилась много лет назад, и на самом деле это нестандартное расширение (добавленное в FreeGLUT). OS X поставляется с собственной реализацией стандарта GLUT (3.x). Хотя, поскольку вы упоминаете OS X 10.9 в своем вопросе, стоит отметить, что компилятор будет генерировать всевозможные раздражающие предупреждения об устаревании, если вы попытаетесь его использовать.

Если вы хотите получить базовый контекст 3.2 в OS X, используя поставляемые с ним фреймворки, вам придется использовать CGL (C) или NSOpenGL (Objective C).

Если вы настаиваете на использовании GLUT, вам нужно будет найти порт FreeGLUT для OS X вместо Framework, который поставляется с платформой. Это, конечно, означает отслеживание дополнительных зависимостей, но я не думаю, что это будет иметь большое значение. Просто не забудьте прекратить включать заголовки GLUT, которые поставляются с Xcode.

person Andon M. Coleman    schedule 26.02.2014
comment
Я не знаком с OSX API, так как я новичок в MAC, я действительно избегаю использования перенасыщения, однако, когда я запрашиваю версию OpenGL, он возвращает 2.1, в то время как Apple заявляет, что Macbook air с Intel HD Graphics 4000 поддерживает OpenGL 4.1. вот почему я использовал перенасыщение, и спасибо за ответ - person BulBul; 27.02.2014
comment
Ну, в OS X вам нужен контекст профиля core, чтобы получить что-либо OpenGL 3.2 или выше. Фреймворк GLUT, который поставляется с OS X/Xcode, не позволит вам сделать это, и некоторые из старых интерфейсов, таких как AGL, тоже не позволят. Вам нужно использовать CGL или NSOpenGL, чтобы изначально получить контекст 3.2+, или использовать FreeGLUT, SDL, glfw3 и т. д., чтобы скрыть от вас низкоуровневые вещи. Если вы только начинаете работать с OS X, я бы предложил одно из более поздних решений. Работа с Cocoa (предпочтительная среда управления окнами Objective C в OS X) является кошмаром для большинства разработчиков C++, начинающих работать с OS X. - person Andon M. Coleman; 27.02.2014
comment
Я попробую один из предложенных вами инструментов, спасибо за вашу помощь, я очень ценю это. - person BulBul; 27.02.2014

Вы можете создать контекст профиля ядра 3.2+ с помощью GLUT, который поставляется с версией Xcode для OS X 10.9. Вам просто нужно использовать другой интерфейс. Вместо вызова glutInitContextVersion() вам нужно добавить флаг GLUTglutInitDisplayMode()2_CORE_PROFILE к вызову glutInitDisplayMode():

glutInitDisplayMode(... | GLUT_3_2_CORE_PROFILE);

Вам также потребуется включить <OpenGL/gl3.h> перед <GLUT/glut.h>, чтобы использовать функции GL3 и более поздних версий.

Все это будет генерировать кучу предупреждений компилятора, поскольку GLUT помечен как устаревший в OS X 10.9. Мой ответ на связанные вопросы содержит инструкции о том, как отключить эти предупреждения: Устаревание перенасыщения в Mac OSX 10.9, IDE: QT Creator.

person Reto Koradi    schedule 01.08.2014

У меня была аналогичная проблема, и я не #include <GL/freeglut.h>. «glutInitContextVersion()» — это новая функция, добавленная freeglut, поэтому вам нужно включить freeglut в дополнение к Glut.

person barbiedude97    schedule 01.08.2014
comment
Включите свободную перенасыщение вместо перенасыщения. - person fintelia; 01.08.2014
comment
Ты прав. Я удалил #include‹GL/glut.h›. и он все еще компилировался и работал нормально. - person barbiedude97; 19.08.2014