這個問題是在 FreeBSD 8.2-STABLE 上遇到的,但我想其實跟 OS 無關。
主要是 Windows 上的 X server 不支援 OpenGL 加速,然後 VirtualBox 裡有一段測試 OpenGL 是否能運作的 code 沒寫好,結果就掛了。
會看到的錯誤訊息如下:
WARNING: QGLContext::makeCurrent(): Cannot make invalid context current
Segmentation fault
稍微看了一下,相關的判斷部分,都是透過檢查 QGLContext::makeCurrent() 的 return value 是否為 0 來判斷。
不過稍微 Google 一下就會發現,其實應該使用 QGLWidget::isValid() 來判斷才對。
我本身只會使用 X server 遠端從 shell 啟動 VirtualBox,沒有從 console 上執行的打算,所以上面這些部分都可以不管它。
在 emulators/virtualbox-ose 裡 make configure 以後,進去這個目錄:
work/VirtualBox-3.2.12_OSE/src/VBox/Frontends/VirtualBox/src/
照下面這樣修改 VBoxFBOverlay.cpp,把 OpenGL 加速整個當成不支援就好:
1 2 3 4 5 6 7 8 9 10 |
--- VBoxFBOverlay.cpp.orig 2010-12-02 01:09:27.000000000 +0800 +++ VBoxFBOverlay.cpp 2011-04-18 14:55:54.000000000 +0800 @@ -4755,6 +4755,7 @@ /* static */ bool VBoxQGLOverlay::isAcceleration2DVideoAvailable() { + return false; #ifndef DEBUG_misha if(!g_bVBoxVHWAChecked) #endif |
至於有打算在 console 上跑,而且能用 OpenGL 加速的,就請自己去它下層呼叫的函式裡照上面的說法修正程式吧。
最近沒什麼動力幫這種東西 debug...