    {-# 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"