2012-05-19 85 views
0

我在x86_64 Arch Linux上运行X11和xfce4,并尝试使用OpenGL和GLFW-b库编译一个简单的OpenGL/GLFW应用程序。但是,我在关闭窗口时遇到了麻烦 - 我只能用Ctrl-C来杀死它。GLFW窗口关闭

代码在http://pastebin.com/i7Zshfk1

谢谢!

回答

3

在主函数中有一个无限循环。即使主窗口关闭,您仍然会在后台运行主更新循环。您可以通过使用主循环这样解决问题:

mainLoop = do 
    drawFrame 
    swapBuffers 

    -- Check if window is still open 
    isOpen <- windowIsOpen 
    -- Call mainLoop recursively 
    when isOpen mainLoop 

你应该再调用mainLoop功能,而不是forever $ do ...循环。

还要注意,你应该小心FPS的限制;你会搞砸自动vsync可能是由您的驱动程序或GLFW选项控制。尽可能快地拨打swapBuffers几乎总是更好。

+0

似乎找不到一个简单的方法来编写windowIsOpen,它没有在GLFW或GLFW-b中定义 – bfops

+0

它在['GLFW-b']中定义(http://hackage.haskell.org/ packages/archive/GLFW-b/latest/doc/html/Graphics-UI-GLFW.html#v:windowIsOpen) – dflemstr

+0

你完全正确 - 我正在寻找isWindowOpen。 *尴尬*。 然后这工作很好,如果GLFW清理代码添加(GLFW.closeWindow和GLFW.terminate) – bfops