Давным давно образовалась у меня проблема — игры не работают в VirtualBox. Проблема не решилась даже тогда, когда в VirtualBox появилась поддержка OpenGL. Единственным решением для разработки игр было использование Mesa в режиме программной эмуляции OpenGL. Наконец то я смог разобраться в причинах этой проблемы. Как оказалось разработчики VirtualBox уже долгое время не фиксят одну маленькую проблему. И, разумеется, glfw использует именно функцию glxGetFBConfigAttrib и не получает флага GLX_WINDOW_BIT после чего считает что не возможно создать окно.
Для решения данной проблемки можно использовать небольшой патч:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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 (данный код не претерпел значительных изменений). Возможно потребуется поправить вручную. После применения патча окно успешно создается.