Закрыть окно GLFW

Я использую Arch Linux x86_64 с X11 и xfce4 и пытаюсь скомпилировать простое приложение OpenGL/GLFW с библиотеками OpenGL и GLFW-b. Однако у меня проблемы с закрытием окна - я могу убить его только с помощью Ctrl-C.

Код на http://pastebin.com/i7Zshfk1

Спасибо!


person bfops    schedule 19.05.2012    source источник


Ответы (1)


У вас есть бесконечный цикл в вашей основной функции. Даже если главное окно закрыто, основной цикл обновления все равно будет выполняться в фоновом режиме. Вы можете решить проблему, используя основной цикл следующим образом:

mainLoop = do
  drawFrame
  swapBuffers

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

Затем вы должны вызвать функцию mainLoop вместо цикла forever $ do ....

Также обратите внимание, что вы должны быть осторожны с ограничением FPS; вы испортите автоматическую вертикальную синхронизацию, которая может контролироваться вашим драйвером или параметрами GLFW. Почти всегда лучше просто позвонить swapBuffers как можно быстрее.

person dflemstr    schedule 19.05.2012
comment
Не могу найти простой способ написать windowIsOpen, который не определен в GLFW или GLFW-b. - person bfops; 19.05.2012
comment
Он определен в GLFW-b - person dflemstr; 19.05.2012
comment
Вы совершенно правы - я искал isWindowOpen. Обидно. Тогда это прекрасно работает, если добавить код очистки GLFW (GLFW.closeWindow и GLFW.terminate) - person bfops; 19.05.2012