打開這一個是有點不可思議,但我會從頭開始:哈斯克爾的OpenGL不會在Ubuntu
至於我雲集,有3種方式在Haskell打開一個OpenGL窗口:GLUT ,GLFW和SDL。我根本不想使用GLUT,因爲它迫使你使用IORef
s,而且基本上只在IO
monad中工作。所以我嘗試了GLFW,並在我的筆記本電腦上製作了一個小東西,該筆記本電腦在XFCE桌面系統上使用了Xubuntu。
現在我很高興並將它複製到我的桌面,這是一個相當新鮮的標準安裝Ubuntu的標準Ubuntu,並且很驚訝什麼也沒看到。在筆記本電腦上運行良好的GLFW代碼在打開窗口之前在無限循環中被捕獲。
然後我將它移植到SDL。同樣的代碼,同一個窗口,並與
Main.hs: user error (SDL_SetVideoMode
SDL message: Couldn't find matching GLX visual)
SDL崩潰我已經檢查回來SDLgears,用同樣的方法打開一個窗口,它工作正常。與其他3D應用程序相同,並且OpenGL已啓用。
讓我感到困惑的是它在XUbuntu下工作,但不在Ubuntu上工作。我在這裏錯過了什麼嗎?哦,如果有幫助,窗口開啓功能:
runGame w h (Game g) = withInit [InitVideo] $ do
glSetAttribute glRedSize 8
glSetAttribute glGreenSize 8
glSetAttribute glBlueSize 8
glSetAttribute glAlphaSize 8
glSetAttribute glDepthSize 16
glSetAttribute glDoubleBuffer 1
_ <- setVideoMode w h 32 [OpenGL, Resizable]
matrixMode $= Projection
loadIdentity
perspective 45 (fromIntegral w/fromIntegral h) 0.1 10500.0
matrixMode $= Modelview 0
loadIdentity
shadeModel $= Smooth
hint PerspectiveCorrection $= Nicest
depthFunc $= Just Lequal
clearDepth $= 1.0
g
傳遞給glXChooseFBConfig的屬性選擇minium所需的功能。因此,選擇16位深度緩衝區可能會返回24位深度緩衝區。只有當沒有模式符合最低要求時纔會返回結果。或者,Haskell GLFW也會選擇可能發生的請求配置。 – datenwolf
我必須承認,我無法完全讀取該表格,但我試圖擺弄'glSetAttribute'上的設置,但無濟於事。 – Lanbo
除了'glSetAttribute'上的設置外,您可能還想調試'setVideoMode'上的設置 - 如果像hammar一樣只有24位顯示器,那麼詢問32位顯示器肯定會失敗。 –