0
我在x86_64 Arch Linux上运行X11和xfce4,并尝试使用OpenGL和GLFW-b库编译一个简单的OpenGL/GLFW应用程序。但是,我在关闭窗口时遇到了麻烦 - 我只能用Ctrl-C来杀死它。GLFW窗口关闭
代码在http://pastebin.com/i7Zshfk1
谢谢!
我在x86_64 Arch Linux上运行X11和xfce4,并尝试使用OpenGL和GLFW-b库编译一个简单的OpenGL/GLFW应用程序。但是,我在关闭窗口时遇到了麻烦 - 我只能用Ctrl-C来杀死它。GLFW窗口关闭
代码在http://pastebin.com/i7Zshfk1
谢谢!
在主函数中有一个无限循环。即使主窗口关闭,您仍然会在后台运行主更新循环。您可以通过使用主循环这样解决问题:
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
几乎总是更好。
似乎找不到一个简单的方法来编写windowIsOpen,它没有在GLFW或GLFW-b中定义 – bfops
它在['GLFW-b']中定义(http://hackage.haskell.org/ packages/archive/GLFW-b/latest/doc/html/Graphics-UI-GLFW.html#v:windowIsOpen) – dflemstr
你完全正确 - 我正在寻找isWindowOpen。 *尴尬*。 然后这工作很好,如果GLFW清理代码添加(GLFW.closeWindow和GLFW.terminate) – bfops