packages feed

GPipe-Core-0.2.3.1: src/Graphics/GPipe/Internal/Debug.hs

module Graphics.GPipe.Internal.Debug where

import           Control.Monad      (when)
import           Data.List          (intercalate)
import           Data.Maybe         (fromMaybe)
import qualified Debug.Trace        as Trace
import           Graphics.GL.Core45
import           Graphics.GL.Types  (GLenum)

traceIt :: Show a => String -> a -> a
traceIt t a = Trace.trace (t ++ " = " ++ show a) a

traceList :: Show a => String -> [a] -> [a]
traceList t as = Trace.trace (t ++ " = [\n\t" ++ intercalate "\n\t" (map show as) ++ "\n]") as

checkGlError :: String -> IO ()
checkGlError title = do
    e <- glGetError
    when (e /= GL_NO_ERROR) $ do
        error $ "[" ++ title ++ "] GL error -> " ++ getErrorMessage e

getErrorMessage :: GLenum -> String
getErrorMessage errorCode = fromMaybe ("Unknown error code " ++ show errorCode) $ lookup errorCode
    [ (GL_NO_ERROR, "GL_NO_ERROR")
    , (GL_INVALID_ENUM, "GL_INVALID_ENUM")
    , (GL_INVALID_VALUE, "GL_INVALID_VALUE")
    , (GL_INVALID_OPERATION, "GL_INVALID_OPERATION")
    , (GL_STACK_OVERFLOW, "GL_STACK_OVERFLOW")
    , (GL_STACK_UNDERFLOW, "GL_STACK_UNDERFLOW")
    , (GL_OUT_OF_MEMORY, "GL_OUT_OF_MEMORY")
    , (GL_INVALID_FRAMEBUFFER_OPERATION, "GL_INVALID_FRAMEBUFFER_OPERATION")
    , (GL_CONTEXT_LOST, "GL_CONTEXT_LOST")
    ]