Archive for Август, 2011

26
Авг

glfw и VirtualBox

   Posted by: admin    in OpenGL

Давным давно образовалась у меня проблема — игры не работают в 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 (данный код не претерпел значительных изменений). Возможно потребуется поправить вручную. После применения патча окно успешно создается.