-- This file was automatically generated.
{-# LANGUAGE CPP, ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Ext.AMD.DebugOutput (
  -- * Extension Support
    gl_AMD_debug_output

  -- * GL_AMD_debug_output
  , glDebugMessageCallbackAMD
  , glDebugMessageEnableAMD
  , glDebugMessageInsertAMD
  , glGetDebugMessageLogAMD
  , pattern GL_DEBUG_CATEGORY_API_ERROR_AMD
  , pattern GL_DEBUG_CATEGORY_APPLICATION_AMD
  , pattern GL_DEBUG_CATEGORY_DEPRECATION_AMD
  , pattern GL_DEBUG_CATEGORY_OTHER_AMD
  , pattern GL_DEBUG_CATEGORY_PERFORMANCE_AMD
  , pattern GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD
  , pattern GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD
  , pattern GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD
  , pattern GL_DEBUG_LOGGED_MESSAGES_AMD
  , pattern GL_DEBUG_SEVERITY_HIGH_AMD
  , pattern GL_DEBUG_SEVERITY_LOW_AMD
  , pattern GL_DEBUG_SEVERITY_MEDIUM_AMD
  , pattern GL_MAX_DEBUG_LOGGED_MESSAGES_AMD
  , pattern GL_MAX_DEBUG_MESSAGE_LENGTH_AMD
) where

import Control.Monad.IO.Class
import Data.Set
import Foreign.Ptr
import Graphics.GL.Internal.FFI
import Graphics.GL.Internal.Proc
import Graphics.GL.Types
import System.IO.Unsafe

-- | Checks that the <https://cvs.khronos.org/svn/repos/ogl/trunk/doc/registry/public/specs/AMD/debug_output.txt GL_AMD_debug_output> extension is available.

gl_AMD_debug_output :: Bool
gl_AMD_debug_output :: Bool
gl_AMD_debug_output = [Char] -> Set [Char] -> Bool
forall a. Ord a => a -> Set a -> Bool
member "GL_AMD_debug_output" Set [Char]
extensions
{-# NOINLINE gl_AMD_debug_output #-}

-- | Usage: @'glDebugMessageCallbackAMD' callback userParam@


glDebugMessageCallbackAMD :: MonadIO m => GLDEBUGPROCAMD -> Ptr () -> m ()
glDebugMessageCallbackAMD :: GLDEBUGPROCAMD -> Ptr () -> m ()
glDebugMessageCallbackAMD = FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
-> GLDEBUGPROCAMD -> Ptr () -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
-> GLDEBUGPROCAMD -> Ptr () -> m ()
ffiDEBUGPROCAMDPtrVIOV FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
glDebugMessageCallbackAMDFunPtr

glDebugMessageCallbackAMDFunPtr :: FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
glDebugMessageCallbackAMDFunPtr :: FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
glDebugMessageCallbackAMDFunPtr = IO (FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ()))
-> FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glDebugMessageCallbackAMD")

{-# NOINLINE glDebugMessageCallbackAMDFunPtr #-}

-- | Usage: @'glDebugMessageEnableAMD' category severity count ids enabled@
--
-- The parameter @enabled@ is a @Boolean@, one of: 'Graphics.GL.Internal.Shared.GL_FALSE', 'Graphics.GL.Internal.Shared.GL_TRUE'.
--
-- The length of @ids@ should be @count@.


glDebugMessageEnableAMD :: MonadIO m => GLenum -> GLenum -> GLsizei -> Ptr GLuint -> GLboolean -> m ()
glDebugMessageEnableAMD :: GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> m ()
glDebugMessageEnableAMD = FunPtr
  (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ())
-> GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ())
-> GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> m ()
ffienumenumsizeiPtruintbooleanIOV FunPtr
  (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ())
glDebugMessageEnableAMDFunPtr

glDebugMessageEnableAMDFunPtr :: FunPtr (GLenum -> GLenum -> GLsizei -> Ptr GLuint -> GLboolean -> IO ())
glDebugMessageEnableAMDFunPtr :: FunPtr
  (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ())
glDebugMessageEnableAMDFunPtr = IO
  (FunPtr
     (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ()))
-> FunPtr
     (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (GLenum -> GLenum -> GLsizei -> Ptr GLenum -> GLboolean -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glDebugMessageEnableAMD")

{-# NOINLINE glDebugMessageEnableAMDFunPtr #-}

-- | Usage: @'glDebugMessageInsertAMD' category severity id length buf@
--
-- The length of @buf@ should be @length@.


glDebugMessageInsertAMD :: MonadIO m => GLenum -> GLenum -> GLuint -> GLsizei -> Ptr GLchar -> m ()
glDebugMessageInsertAMD :: GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> m ()
glDebugMessageInsertAMD = FunPtr
  (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ())
-> GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ())
-> GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> m ()
ffienumenumuintsizeiPtrcharIOV FunPtr
  (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ())
glDebugMessageInsertAMDFunPtr

glDebugMessageInsertAMDFunPtr :: FunPtr (GLenum -> GLenum -> GLuint -> GLsizei -> Ptr GLchar -> IO ())
glDebugMessageInsertAMDFunPtr :: FunPtr
  (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ())
glDebugMessageInsertAMDFunPtr = IO
  (FunPtr
     (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ()))
-> FunPtr
     (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (GLenum -> GLenum -> GLenum -> GLsizei -> Ptr GLchar -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glDebugMessageInsertAMD")

{-# NOINLINE glDebugMessageInsertAMDFunPtr #-}

-- | Usage: @'glGetDebugMessageLogAMD' count bufsize categories severities ids lengths message@
--
-- The length of @categories@ should be @count@.
--
-- The length of @severities@ should be @count@.
--
-- The length of @ids@ should be @count@.
--
-- The length of @lengths@ should be @count@.
--
-- The length of @message@ should be @bufsize@.


glGetDebugMessageLogAMD :: MonadIO m => GLuint -> GLsizei -> Ptr GLenum -> Ptr GLuint -> Ptr GLuint -> Ptr GLsizei -> Ptr GLchar -> m GLuint
glGetDebugMessageLogAMD :: GLenum
-> GLsizei
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLsizei
-> Ptr GLchar
-> m GLenum
glGetDebugMessageLogAMD = FunPtr
  (GLenum
   -> GLsizei
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLsizei
   -> Ptr GLchar
   -> IO GLenum)
-> GLenum
-> GLsizei
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLsizei
-> Ptr GLchar
-> m GLenum
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLenum
   -> GLsizei
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLsizei
   -> Ptr GLchar
   -> IO GLenum)
-> GLenum
-> GLsizei
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLenum
-> Ptr GLsizei
-> Ptr GLchar
-> m GLenum
ffiuintsizeiPtrenumPtruintPtruintPtrsizeiPtrcharIOuint FunPtr
  (GLenum
   -> GLsizei
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLsizei
   -> Ptr GLchar
   -> IO GLenum)
glGetDebugMessageLogAMDFunPtr

glGetDebugMessageLogAMDFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLenum -> Ptr GLuint -> Ptr GLuint -> Ptr GLsizei -> Ptr GLchar -> IO GLuint)
glGetDebugMessageLogAMDFunPtr :: FunPtr
  (GLenum
   -> GLsizei
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLenum
   -> Ptr GLsizei
   -> Ptr GLchar
   -> IO GLenum)
glGetDebugMessageLogAMDFunPtr = IO
  (FunPtr
     (GLenum
      -> GLsizei
      -> Ptr GLenum
      -> Ptr GLenum
      -> Ptr GLenum
      -> Ptr GLsizei
      -> Ptr GLchar
      -> IO GLenum))
-> FunPtr
     (GLenum
      -> GLsizei
      -> Ptr GLenum
      -> Ptr GLenum
      -> Ptr GLenum
      -> Ptr GLsizei
      -> Ptr GLchar
      -> IO GLenum)
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (GLenum
         -> GLsizei
         -> Ptr GLenum
         -> Ptr GLenum
         -> Ptr GLenum
         -> Ptr GLsizei
         -> Ptr GLchar
         -> IO GLenum))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glGetDebugMessageLogAMD")

{-# NOINLINE glGetDebugMessageLogAMDFunPtr #-}

pattern $bGL_DEBUG_CATEGORY_API_ERROR_AMD :: a
$mGL_DEBUG_CATEGORY_API_ERROR_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_API_ERROR_AMD = 0x9149

pattern $bGL_DEBUG_CATEGORY_APPLICATION_AMD :: a
$mGL_DEBUG_CATEGORY_APPLICATION_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_APPLICATION_AMD = 0x914F

pattern $bGL_DEBUG_CATEGORY_DEPRECATION_AMD :: a
$mGL_DEBUG_CATEGORY_DEPRECATION_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_DEPRECATION_AMD = 0x914B

pattern $bGL_DEBUG_CATEGORY_OTHER_AMD :: a
$mGL_DEBUG_CATEGORY_OTHER_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_OTHER_AMD = 0x9150

pattern $bGL_DEBUG_CATEGORY_PERFORMANCE_AMD :: a
$mGL_DEBUG_CATEGORY_PERFORMANCE_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_PERFORMANCE_AMD = 0x914D

pattern $bGL_DEBUG_CATEGORY_SHADER_COMPILER_AMD :: a
$mGL_DEBUG_CATEGORY_SHADER_COMPILER_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD = 0x914E

pattern $bGL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD :: a
$mGL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD = 0x914C

pattern $bGL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD :: a
$mGL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD = 0x914A

pattern $bGL_DEBUG_LOGGED_MESSAGES_AMD :: a
$mGL_DEBUG_LOGGED_MESSAGES_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_LOGGED_MESSAGES_AMD = 0x9145

pattern $bGL_DEBUG_SEVERITY_HIGH_AMD :: a
$mGL_DEBUG_SEVERITY_HIGH_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_SEVERITY_HIGH_AMD = 0x9146

pattern $bGL_DEBUG_SEVERITY_LOW_AMD :: a
$mGL_DEBUG_SEVERITY_LOW_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_SEVERITY_LOW_AMD = 0x9148

pattern $bGL_DEBUG_SEVERITY_MEDIUM_AMD :: a
$mGL_DEBUG_SEVERITY_MEDIUM_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_DEBUG_SEVERITY_MEDIUM_AMD = 0x9147

pattern $bGL_MAX_DEBUG_LOGGED_MESSAGES_AMD :: a
$mGL_MAX_DEBUG_LOGGED_MESSAGES_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_MAX_DEBUG_LOGGED_MESSAGES_AMD = 0x9144

pattern $bGL_MAX_DEBUG_MESSAGE_LENGTH_AMD :: a
$mGL_MAX_DEBUG_MESSAGE_LENGTH_AMD :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_MAX_DEBUG_MESSAGE_LENGTH_AMD = 0x9143