content: {-# OPTIONS_HADDOCK hide #-}
  
  {-| Implements functions to dump portions of the OpenGL state to stdout.
       Used for debugging.
  -}
  module Brillo.Internals.Interface.Debug (
    dumpFramebufferState,
    dumpFragmentState,
  )
  where
  
  import Graphics.Rendering.OpenGL (get)
  import Graphics.Rendering.OpenGL.GL qualified as GL
  
  
  -- | 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"
  