Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell OpenGL赢得了';无法在Ubuntu中打开_Opengl_Haskell_Sdl_Ubuntu 11.04_Glfw - Fatal编程技术网

Haskell OpenGL赢得了';无法在Ubuntu中打开

Haskell OpenGL赢得了';无法在Ubuntu中打开,opengl,haskell,sdl,ubuntu-11.04,glfw,Opengl,Haskell,Sdl,Ubuntu 11.04,Glfw,这个有点奇怪,但我将从一开始开始: 据我所知,有3种方法可以在Haskell中打开OpenGL窗口:GLUT、GLFW和SDL。我根本不想使用GLUT,因为它迫使您使用IORefs,并且基本上只在IOmonad中工作。所以我尝试了GLFW,在我的笔记本电脑上做了一点东西,它使用Xubuntu和XFCE桌面系统 现在我很高兴,把它复制到我的桌面上,这是一个安装了Unity的全新标准Ubuntu,我惊讶地发现什么都没有。在笔记本电脑上运行良好的GLFW代码在打开窗口之前就陷入了无休止的循环 然后我把

这个有点奇怪,但我将从一开始开始:

据我所知,有3种方法可以在Haskell中打开OpenGL窗口:GLUT、GLFW和SDL。我根本不想使用GLUT,因为它迫使您使用
IORef
s,并且基本上只在
IO
monad中工作。所以我尝试了GLFW,在我的笔记本电脑上做了一点东西,它使用Xubuntu和XFCE桌面系统

现在我很高兴,把它复制到我的桌面上,这是一个安装了Unity的全新标准Ubuntu,我惊讶地发现什么都没有。在笔记本电脑上运行良好的GLFW代码在打开窗口之前就陷入了无休止的循环

然后我把它全部移植到SDL。相同的代码、相同的窗口和SDL崩溃

Main.hs: user error (SDL_SetVideoMode
SDL message: Couldn't find matching GLX visual)
我用同样的方法打开了一个窗口,它工作得很好。和其他一些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
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

_此错误消息试图告诉您,不支持颜色、深度和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
...

传递给glXChooseFBConfig的属性选择所需的最小功能。因此,选择16位深度缓冲区可能会返回24位深度缓冲区。只有当没有模式符合最低要求时,才会返回结果。或者Haskell GLFW也会为请求的配置选择正确的配置。我必须承认,我不能完全阅读该表,但我尝试过摆弄
glSetAttribute
上的设置,但是没有用。除了
glSetAttribute
上的设置之外,你可能还想摆弄
setVideoMode
上的设置——如果像hammar一样,你只有24位显示器,那么要求32位显示器肯定会失败。我已经将
setVideoMode
bpp
参数设置为0,这意味着当前桌面设置,并删除了所有
glSetAttribute
调用,但再次无效。