lowgl-0.2.0.1: Graphics/GL/Low/Error.hs
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE PatternSynonyms #-}
module Graphics.GL.Low.Error where
import Control.Exception
import Data.Typeable
import Graphics.GL
-- | Detectable errors.
data GLError =
InvalidEnum | -- ^ Enum argument out of range.
InvalidValue | -- ^ Integer argument out of range.
InvalidOperation | -- ^ Operation illegal in current state.
InvalidFramebufferOperation | -- ^ Framebuffer is not complete.
OutOfMemory
deriving Typeable
instance Exception GLError
instance Show GLError where
show InvalidEnum = "INVALID_ENUM enum argument out of range"
show InvalidValue = "INVALID_VALUE Numeric argument out of range"
show InvalidOperation = "INVALID_OPERATION Illegal in current state"
show InvalidFramebufferOperation = "INVALID_FRAMEBUFFER_OPERATION Framebuffer object is not complete"
show OutOfMemory = "Not enough memory left to execute command"
-- | Check for a GL Error.
getGLError :: IO (Maybe GLError)
getGLError = do
n <- glGetError
return $ case n of
GL_NO_ERROR -> Nothing
GL_INVALID_ENUM -> Just InvalidEnum
GL_INVALID_VALUE -> Just InvalidValue
GL_INVALID_OPERATION -> Just InvalidOperation
GL_INVALID_FRAMEBUFFER_OPERATION -> Just InvalidFramebufferOperation
GL_OUT_OF_MEMORY -> Just OutOfMemory
_ -> error ("unknown GL error " ++ show n)