windowPoint :: GL.Position -> IO (Double,Double) windowPoint pos@(GL.Position x y) = do viewport@(_,GL.Size _ height) <- get GL.viewport modelviewMatrix <- getMatrix $ GL.Modelview 0 projectionMatrix <- getMatrix $ GL.Projection let pos3 = GL.Vertex3 (fromIntegral x) (fromIntegral (height-y)) 0 GL.Vertex3 vx vy _ <- GLU.unProject pos3 modelviewMatrix projectionMatrix viewport return (vx,vy) where getMatrix :: GL.MatrixMode -> IO(GL.GLmatrix Scalar) getMatrix mode = get $ GL.matrix $ Just mode