Загрузка контекста OpenGL 4.1 в OSX

Я пытаюсь изучить OpenGL на OSX Mavericks, который на сегодняшний день поддерживает OpenGL 4.1.

Я сохраняю его базовым и компилирую с использованием gcc (g++), но при загрузке открытого контекста GL через Freeglut OSX загружает устаревший профиль OpenGL.

Я пробовал это: OpenGL 3.3 на OSX с FreeGLUT, но с не повезло, вызов glGetString возвращает эти значения:

NVIDIA GeForce GT 750M OpenGL Engine
2.1 NVIDIA-8.24.9 310.40.25f01

У кого-нибудь есть идеи?

я вызываю FreeGlut со следующими контекстными вызовами:

glutInitContextVersion(3,2);
glutInitContextProfile(GLUT_CORE_PROFILE);

Изменить: только что попробовал то же приложение в Windows, а не в OSX, и получил эту ошибку:

2.1 запрошен контекст, но wglCreateContextAttribsARB недоступен. Возврат к устаревшему созданию контекста

Вот моя точка входа в приложение

    int main (int argc, char * argv[])
{
try{
    glutInit(&argc, argv);


    glutInitDisplayMode(GLUT_RGBA);

    glutInitWindowSize(512,512);

    glutInitContextVersion(4,2);

    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    cout << "Called GLUT with 'GLUT_FORWARD_COMPATIBLE' \n";
    //cout << VAO_IDs::NumVAOs;

    glutCreateWindow("Triangles!");

    cout << "Calling GLEW. " << endl;
    glewExperimental = GL_TRUE;
    if(glewInit())
    {
        cerr << "unable to initialise GLEW.. Exiting " << endl;
    }
    cout << "calling init " << endl;
    init();
    cout << "Setting display function " << endl;
    glutDisplayFunc(display);
    cout << "Entering loop " << endl;
    glutMainLoop();
    }
    catch (exception)
    {
        cerr << "ERROR! " <<endl;
    }

    }

Хорошо Итак...

Перекомпилирован на ПК с Windows, работает без проблем, возможно, проблема с FreeGLUT на OSX или самой OSX или их комбинации.

По крайней мере, теперь у меня есть код, с которым я могу протестировать OSX...


person VariableDeclared    schedule 07.04.2014    source источник
comment
Вы должны создать совместимый с forwad контекст на OSX   -  person derhass    schedule 08.04.2014
comment
И как мне это сделать?   -  person VariableDeclared    schedule 08.04.2014
comment
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE); может помочь   -  person derhass    schedule 08.04.2014
comment
Спасибо, я попробую.   -  person VariableDeclared    schedule 08.04.2014
comment
Просто поставил этот, к сожалению, не сработало. Вы знаете, где я могу получить список опций для glutInitContextProfile? это было бы полезно.   -  person VariableDeclared    schedule 08.04.2014
comment
OS X даже не имеет метода в своих базовых API-интерфейсах CGL/NSOpenGL для выбора прямой совместимости. В значительной степени подразумевается, что то, что вам дается при создании контекста 3.2+ в OS X, будет вести себя как совместимое с предыдущими версиями. Во всяком случае, это может быть подсказкой для некоторых фреймворков, чтобы сама фреймворк понимала, какие функции доступны... но создание контекста не завершится ошибкой, если вы не укажете это флаг. Можете ли вы добавить еще код, который помещает эти два вызова в контекст? Если вы вызываете их, например, после создания контекста, они ничего не делают.   -  person Andon M. Coleman    schedule 08.04.2014
comment
ОК будет включать код, спасибо за отзыв.   -  person VariableDeclared    schedule 08.04.2014


Ответы (1)


OSX Mavericks не поддерживает OpenGL 4.2. Следовательно, невозможно создать контекст 4.2. Последняя поддерживаемая версия — 4.1 + некоторые расширения, которые включены в Core в 4.2.

Если вы хотите отправить товар сегодня, единственным вариантом является использование OpenGL 4.1 с расширениями.

Вот код для GLFW3:

glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 1 );
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE );
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
person Sergey K.    schedule 10.04.2014
comment
Привет, даже при запросе контекста 4.1 у меня возникают проблемы с GLEW или Gl3w, которые не могут получить указатели функций. - person VariableDeclared; 10.04.2014
comment
@VariableDeclared: у меня есть опыт работы с GLEW, но GLFW3 работает без сбоев. Я добавил код в свой ответ. - person Sergey K.; 10.04.2014