这个有点奇怪,但我会从头开始:
据我所知,有三种方法可以在Haskell中打开OpenGL窗口:GLUT,GLFW和SDL。我根本不想使用GLUT,因为它迫使你使用IORef
并且基本上只在IO
monad中工作。所以我尝试了GLFW,并在我的笔记本电脑上做了一件小事,它将Xubuntu与XFCE桌面系统结合使用。
现在我很开心并将它复制到我的桌面上,这是一个相当新的标准Ubuntu与Unity,并且惊讶地看不到任何东西。在打开窗口之前,在笔记本电脑上运行良好的GLFW代码完全被无限循环捕获。
然后我将它全部移植到SDL。相同的代码,相同的窗口和SDL与
崩溃Main.hs: user error (SDL_SetVideoMode
SDL message: Couldn't find matching GLX visual)
我已使用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
答案 0 :(得分:3)
此错误消息试图告诉您不支持颜色,深度和Alpha缓冲区(“GLX visual”)的位深度组合。要查看您可以在系统上使用哪些系统,请尝试运行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
...