glfw и VirtualBox
Давным давно образовалась у меня проблема — игры не работают в VirtualBox. Проблема не решилась даже тогда, когда в VirtualBox появилась поддержка OpenGL. Единственным решением для разработки игр было использование Mesa в режиме программной эмуляции OpenGL. Наконец то я смог разобраться в причинах этой проблемы. Как оказалось разработчики VirtualBox уже долгое время не фиксят одну маленькую проблему. И, разумеется, glfw использует именно функцию glxGetFBConfigAttrib и не получает флага GLX_WINDOW_BIT после чего считает что не возможно создать окно.
Для решения данной проблемки можно использовать небольшой патч:
diff -Nru glfw-2.7.2/lib/x11/x11_window.c glfw-2.7.new/lib/x11/x11_window.c
--- glfw-2.7.2/lib/x11/x11_window.c 2011-05-07 18:31:42.000000000 +0400
+++ glfw-2.7.new/lib/x11/x11_window.c 2011-08-25 17:02:59.374634128 +0400
@@ -484,11 +483,12 @@
continue;
}
+ /* Vbox will never return GLX_WINDOW_BIT. We may check for GLX_PIXMAP_BIT here, or just ignore it, since we got VISUALID it should be fine.
if( !( getFBConfigAttrib( fbconfigs[i], GLX_DRAWABLE_TYPE ) & GLX_WINDOW_BIT ) )
{
// Only consider window GLXFBConfigs
continue;
- }
+ }*/
result[*found].redBits = getFBConfigAttrib( fbconfigs[i], GLX_RED_SIZE );
result[*found].greenBits = getFBConfigAttrib( fbconfigs[i], GLX_GREEN_SIZE );
Данный патч можно применить не только к ветке 2.7 но и к 2.6 (данный код не претерпел значительных изменений). Возможно потребуется поправить вручную. После применения патча окно успешно создается.