GLFW отваря OpenGL 3.2 контекст, но Freeglut не може - защо?

Работя на Mac, имам компилиран и инсталиран FreeGlut, но изглежда не мога да получа контекста на OpenGL 3.2 с него. Мога обаче да го получа без проблем, докато използвам GLFW. Така че в GLFW този код работи перфектно:

    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwOpenWindow(500, 500, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)

Но с FreeGlut този код е неуспешен (на glutCreateWindow):

glutInitContextVersion (3, 2);
glutInitContextProfile(GLUT_CORE_PROFILE);  
glutInitWindowSize (width, height); 
glutInitWindowPosition (300, 200);
int window = glutCreateWindow (argv[0]);

Грешката, с която се проваля, е:

X Error of failed request:  BadRequest (invalid request code or no such operation)
  Major opcode of failed request:  34 (X_UngrabKey)
  Serial number of failed request:  29
  Current serial number in output stream:  29

Работя с MacOS X 10.8 Mountain Lion, с графика Intel HD4000, инсталирах XQuartz като мой X11 сървър и компилирах и инсталирах FreeGlut 2.8 от източници.

Някой знае ли какъв може да е проблема?


person gambiting    schedule 26.02.2013    source източник
comment
Имам точния проблем, но използвам FreeGlut, включен в XQuartz (opt/x11/lib opt/x11/include). Решихте ли проблема?   -  person Christoph    schedule 29.09.2013
comment
Същият проблем тук - успяхте ли да разрешите проблема?   -  person M-V    schedule 12.11.2013
comment
Някой от вас реши ли проблема? Имам същия проблем. Използвам freeGlut, включен в XQuartz   -  person ammar26    schedule 29.01.2014
comment
Най-добре е просто да се придържате към glfw, аз се сблъсках със същия проблем на OS X 10.10. Кодът се компилира добре, но след това се срива при изпълнение. Имате настройка на XQuartz. Опитах без успех да получа версия 3.2   -  person Joseph    schedule 03.04.2015


Отговори (3)


В 10.8 и 10.7 GL 3.2 е наличен, ако изрично го извикате, когато настройвате контекста на GL. Apple нарича това „основен профил“, за да се разграничи от „наследения профил“, който е GL 2.1.

Сблъсках се с този проблем с Wine на OSX, той не поддържа OpenGL 3.2. Разбирам, че сървърът X11 (или Apple X11, или XQuartz) в момента не прилага поддръжката на 3.2, нито има превключвател, който да се премести някъде, за да се активира. Може да е заради проблеми със съвместимостта, тъй като профилът 3.2 ще развали някои съществуващи GL приложения

Тази публикация предлага да използвате GLFW (или може би GLUT.framework на Apple, ако все още има такова нещо)

Тази страница обяснява стека на GL на OSX и потвърждава проблема с 2.1 с GLX.

person wally    schedule 26.02.2013
comment
Съжалявам, но не виждам как това е свързано с моя въпрос. Както показах - работи с GLFW, който работи върху XQuartz на моята система, така че определено поддържа 3.2 контексти. - person gambiting; 27.02.2013
comment
Съжалявам, но не виждам как това е свързано с моя въпрос. Както казах - OpenGL 3.2 работи с GLFW, който работи върху XQuartz на моята система, така че определено поддържа 3.2 контексти. Единственият ми проблем е, че бих искал да използвам freeglut, само защото е по-удобно. Но ако това не е възможно, тогава ще разработя с помощта на GLFW. Но моля, не ми казвайте, че е невъзможно да получа контекст 3.2, защото вече имам такъв. - person gambiting; 27.02.2013
comment
glfw също има Cocoa and Carbon порт, Вие ли сте сигурен ли си, че работи върху XQuartz? - person wally; 27.02.2013

Freeglut е разширено изпълнение на SGI GLUT Toolkit и (с няколко изключения около остарелия хардуер) изпълнява същите функции.

За съжаление, това включва редица функции, които биха се счупили при стриктно CORE/FORWARD COMPATIBLE изпълнение.

Обикновено, ако поискате контекст БЕЗ да посочите версия или профил, ще получите най-доброто, което комбинацията от драйвер и GL инструментариум може да предложи, което обикновено е профил за съвместимост, а не основен профил.

Имайте предвид, че единственото нещо, което губите чрез използване на профил за съвместимост, е предполагаемата проверка за отхвърлени функции. Всички нови основни функции трябва да работят без проблем.

Този проблем с freeglut не е ограничен до Apple, той се проявява и под Linux, използвайки някои Gallium драйвери. Не е ясно дали има някакво краткосрочно намерение да се коригира това, така че ако трябва да използвате CORE/FORWARD COMPATIBLE, вероятно трябва да преминете към GLFW или SDL.

person Roger Barrett    schedule 23.02.2014

Трябва да включите знамето. обикновено под версията. Трябва да изглежда нещо подобно:

glutInitContextFlag(GLUT_FOWARD_COMPATIBLE);
person jonny    schedule 14.07.2014