OpenGL ES 2.0 с осмесой

Я пытаюсь создать контекст OpenGL с помощью osmesa (меза за экраном). Я хочу использовать программную реализацию mesa без окна и сохранить визуализированный вывод в файл png.

http://www.mesa3d.org/osmesa.html

Я создаю контекст GL со следующим:

OSMesaContext context = OSMesaCreateContext(GL_RGBA, NULL);
OSMesaMakeCurrent(context, buffer, GL_UNSIGNED_BYTE, width, height);

Однако, когда я вызываю glGetString(GL_VERSION), версия 2.1 Mesa 10.1.1. Как и ожидалось, ни один из моих шейдеров GLSL ES не компилируется. При использовании SDL я могу предоставить подсказку о версии и создать контекст GLES 2.0.

Как указать версию контекста GL, создаваемого osmesa?


person TheResistorNetwork    schedule 08.05.2015    source источник


Ответы (1)


Если вы посмотрите на src/mesa/drivers/osmesa/osmesa.c, около строки 745, вы увидите, что он явно запрашивает профиль совместимости с OpenGL, который Mesa ограничивает OpenGL 2.1 и GLSL 130 (см. src/mesa/main/ строка version.c. Замена API_OPENGL_COMPAT на API_OPENGL_CORE приводит к тому, что версия OpenGL равна 0.0 в Mesa 10.6.2, поэтому, к сожалению, простое исправление не работает. Но установка переменной среды MESA_GL_VERSION_OVERRIDE на «3.3», похоже, работает. t проверено, кроме просмотра того, что возвращает glGetString(GL_VERSION) Удачи!

person Greg Couch    schedule 23.07.2015
comment
Это работает с MESA_GL_VERSION_OVERRIDE=999.999 Я сомневаюсь, что моя версия OpenGL 999.999 - person Szabolcs Dombi; 20.11.2017