2011-09-30 35 views
1

打開這一個是有點不可思議,但我會從頭開始:哈斯克爾的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 

回答

3

此錯誤消息是想告訴你,你的顏色,深度和alpha緩衝區位深度的組合(一個「GLX視覺」)不支持的。要查看哪些可用於您的系統,請嘗試運行glxinfo

$ glxinfo 
... 

65 GLX Visuals 
    visual x bf lv rg d st colorbuffer sr ax dp st accumbuffer ms cav 
    id dep cl sp sz l ci b ro r g b a F gb bf th cl r g b a ns b eat 
---------------------------------------------------------------------------- 
0x023 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 None 
0x024 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 8 16 16 16 16 0 0 None 
0x025 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 None 
0x026 24 tc 0 32 0 r . . 8 8 8 8 . . 0 24 0 16 16 16 16 0 0 None 
0x027 24 tc 0 32 0 r y . 8 8 8 8 . . 0 24 8 0 0 0 0 0 0 None 
... 
+1

傳遞給glXChooseFBConfig的屬性選擇minium所需的功能。因此,選擇16位深度緩衝區可能會返回24位深度緩衝區。只有當沒有模式符合最低要求時纔會返回結果。或者,Haskell GLFW也會選擇可能發生的請求配置。 – datenwolf

+0

我必須承認,我無法完全讀取該表格,但我試圖擺弄'glSetAttribute'上的設置,但無濟於事。 – Lanbo

+0

除了'glSetAttribute'上的設置外,您可能還想調試'setVideoMode'上的設置 - 如果像hammar一樣只有24位顯示器,那麼詢問32位顯示器肯定會失敗。 –