Изменить: решено. Это была проблема 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 не будет работать до тех пор, пока окно не будет успешно открыто.