Почему OpenGl был понижен, когда я установил Mountain Lion?

Изменить: решено. Это была проблема GLFW, не связанная с Mountain Lion или OpenGL.

Раньше я использовал Lion на своем Macbook Pro 2009 года. В XCode без проблем работало следующее:

 glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);       
 glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
 glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
 glfwOpenWindowHint(GLFW_WINDOW_NO_RESIZE, GL_TRUE);
 glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);

 ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE);    // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"

 int major, minor, rev;
 glfwGetGLVersion(&major, &minor, &rev);
 fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);

А затем напечатал OpenGL version received: 3.2. После того, как я обновился до Mountain Lion, приведенный выше код не будет работать (зависает на ALLEGE, потому что glfwOpenWindow возвращает false). Удаление всех подсказок окна GLFW, например:

 ALLEGE(glfwOpenWindow(SCREEN_SIZE.x, SCREEN_SIZE.y, 8, 8, 8, 8, 0, 0, GLFW_WINDOW) != GL_FALSE);    // msg = "glfwOpenWindow failed. Can your hardware handle OpenGL 3.2?"

 int major, minor, rev;
 glfwGetGLVersion(&major, &minor, &rev);
 fprintf(stderr, "OpenGL version recieved: %d.%d.%d\n", major, minor, rev);

позволяет ОС выбирать, какую версию OpenGL использовать. Приведенный выше код компилируется и запускается, но в консоль выводится OpenGL version received: 2.1.

Я сказал: "Что?" и заглянул в приложение «Информация о системе» для получения дополнительной информации. Раздел Frameworks сообщает мне, что у меня есть OpenGl framework 1.8.6.

Теперь я немного сбит с толку и довольно расстроен, если мой фреймворк OpenGL действительно был понижен. Я не знаю, как вручную обновить мою структуру. Кто-нибудь может помочь мне понять, что происходит?

Edit1: Использование OpenGL Extensions Viewer.app сообщает мне, что моя версия OpenGl 2.1 NVIDIA-8.0.61

Edit2: проблема, по-видимому, связана с тем, что мой проект не использует правильный профиль (совместимость, а не ядро), но когда я использую подсказки glfw для указания ядра, например.

 glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

последующий вызов glfwOpenWindow() терпит неудачу. Я не знаю, как диагностировать эту проблему, потому что glGetError не будет работать до тех пор, пока окно не будет успешно открыто.


person cjcurrie    schedule 20.01.2013    source источник
comment
Mountain Lion не понизила версию OpenGL. Скорее всего, это проблема, когда glfw ищет версию не в том месте.   -  person Kurt Revis    schedule 21.01.2013
comment
Также см. этот связанный вопрос о том, как увидеть функции OpenGL 3.2 с помощью glfw.   -  person Kurt Revis    schedule 21.01.2013
comment
Спасибо @KurtRevis, но в связанном с этим вопросе возникла проблема с тем, что не было указано, какой профиль OpenGL использовать. Строка, которую я использовал выше, `glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);`, задокументирована здесь для включить основной профиль. Этот метод удался на Lion, но теперь терпит неудачу. Я не могу диагностировать проблему с помощью glGetError() из-за плохого доступа (я предполагаю, что контекст не был создан при сбое OpenWindow).   -  person cjcurrie    schedule 21.01.2013


Ответы (1)


Перекомпиляция GLFW из исходников и использование статической компоновки только решили мою проблему. Какая-то внутренняя ошибка приводила к неправильной работе glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);.

person cjcurrie    schedule 20.01.2013