, . OpenGL OpenGL. displayCallback GLUT, .
: / GLUT, , . , , ; , , , (, EGL GLX X11).
: displayCallback. , GLUT , , , , .
(, OpenGL; ), , . - ( Data.IORef):
main = do
mouseStateRef <- newIORef (False, (0, 0))
keyboardMouseCallback $= Just (myKeyboardMouseCallback mouseStateRef)
displayCallback $= (display mouseStateRef)
myKeyboardMouseCallback mouseStateRef key keyState modifiers (Position x y) =
case key of
MouseButton LeftButton -> do
writeIORef mouseStateRef (keyState == Pressed, (x, y))
_ -> return ()
display mouseStateRef = do
clear [ColorBuffer]
(pressed, (x, y)) <- readIORef mouseStateRef
when pressed . renderPrimitive Quads $ do
color $ (Color3 (1.0::GLfloat) 0 0)
vertex $ (Vertex3 (x::GLfloat) y 0)
vertex $ (Vertex3 (x::GLfloat) (y+0.2) 0)
vertex $ (Vertex3 ((x+0.2)::GLfloat) (y+0.2) 0)
vertex $ (Vertex3 ((x+0.2)::GLfloat) y 0)
flush