GLUT- A binding for the OpenGL Utility Toolkit
Copyright(c) Sven Panne 2002-2018
MaintainerSven Panne <>
Safe HaskellNone



After a GLUT program has done initial setup such as creating windows and menus, GLUT programs enter the GLUT event processing loop by calling mainLoop or handle events iteratively with mainLoopEvent.


Handling events

mainLoop :: MonadIO m => m () Source #

Enter the GLUT event processing loop; it will call as necessary any callbacks that have been registered. This routine should be called at most once in a GLUT program.

mainLoopEvent :: MonadIO m => m () Source #

(freeglut only) Process one iteration's worth of events in its event loop. This allows the application to control its own event loop and still use the GLUT package.

leaveMainLoop :: MonadIO m => m () Source #

(freeglut only) Stop the event loop. If actionOnWindowClose contains Exit, the application will exit; otherwise control will return to the function which called mainLoop.

If the application has two nested calls to mainLoop and calls leaveMainLoop, the behaviour is undefined. It may leave only the inner nested loop or it may leave both loops. If the reader has a strong preference for one behaviour over the other he should contact the freeglut Programming Consortium and ask for the code to be fixed.

Controlling the behaviour when windows are closed

data ActionOnWindowClose Source #

The behaviour when the user closes a window.



Exit the whole program when any window is closed or leaveMainLoop is called (default).


Return from mainLoop when any window is closed.


Return from mainLoop after the last window is closed.

actionOnWindowClose :: StateVar ActionOnWindowClose Source #

(freeglut only) Controls the behaviour when the user closes a window.