{-# OPTIONS_HADDOCK hide #-}

-- | Implements functions to dump portions of the OpenGL state to stdout.
--      Used for debugging.
module Graphics.Gloss.Internals.Interface.Debug
        ( dumpFramebufferState
        , dumpFragmentState )
where
import qualified Graphics.Rendering.OpenGL.GL   as GL
import Graphics.Rendering.OpenGL                (get)

-- | Dump internal state of the OpenGL framebuffer
dumpFramebufferState :: IO ()
dumpFramebufferState
 = do
        auxBuffers      <- get GL.auxBuffers
        doubleBuffer    <- get GL.doubleBuffer
        drawBuffer      <- get GL.drawBuffer

        rgbaBits        <- get GL.rgbaBits
        stencilBits     <- get GL.stencilBits
        depthBits       <- get GL.depthBits
        accumBits       <- get GL.accumBits

        clearColor      <- get GL.clearColor
        clearStencil    <- get GL.clearStencil
        clearDepth      <- get GL.clearDepth
        clearAccum      <- get GL.clearAccum

        colorMask       <- get GL.colorMask
        stencilMask     <- get GL.stencilMask
        depthMask       <- get GL.depthMask

        putStr  $  "* dumpFramebufferState\n"
                ++ "  auxBuffers         = " ++ show auxBuffers         ++ "\n"
                ++ "  doubleBuffer       = " ++ show doubleBuffer       ++ "\n"
                ++ "  drawBuffer         = " ++ show drawBuffer         ++ "\n"
                ++ "\n"
                ++ "  bits       rgba    = " ++ show rgbaBits           ++ "\n"
                ++ "             stencil = " ++ show stencilBits        ++ "\n"
                ++ "             depth   = " ++ show depthBits          ++ "\n"
                ++ "             accum   = " ++ show accumBits          ++ "\n"
                ++ "\n"
                ++ "  clear      color   = " ++ show clearColor         ++ "\n"
                ++ "             stencil = " ++ show clearStencil       ++ "\n"
                ++ "             depth   = " ++ show clearDepth         ++ "\n"
                ++ "             accum   = " ++ show clearAccum         ++ "\n"
                ++ "\n"
                ++ "  mask       color   = " ++ show colorMask          ++ "\n"
                ++ "             stencil = " ++ show stencilMask        ++ "\n"
                ++ "             depth   = " ++ show depthMask          ++ "\n"
                ++ "\n"


-- | Dump internal state of the fragment renderer.
dumpFragmentState :: IO ()
dumpFragmentState
 = do
        blend           <- get GL.blend
        blendEquation   <- get GL.blendEquation
        blendFunc       <- get GL.blendFunc

        putStr  $  "* dumpFragmentState\n"
                ++ "  blend              = " ++ show blend              ++ "\n"
                ++ "  blend equation     = " ++ show blendEquation      ++ "\n"
                ++ "  blend func         = " ++ show blendFunc          ++ "\n"
                ++ "\n"