-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.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.Raw.Internal.FFI
import Graphics.GL.Raw.Internal.Proc
import Graphics.GL.Raw.Types
import System.IO.Unsafe

gl_AMD_debug_output :: Bool
gl_AMD_debug_output = member "GL_AMD_debug_output" extensions

glDebugMessageCallbackAMD :: MonadIO m => GLDEBUGPROCAMD -> Ptr () -> m ()
glDebugMessageCallbackAMD = ffiDEBUGPROCAMDPtrVIOV glDebugMessageCallbackAMDFunPtr

glDebugMessageCallbackAMDFunPtr :: FunPtr (GLDEBUGPROCAMD -> Ptr () -> IO ())
glDebugMessageCallbackAMDFunPtr = unsafePerformIO (getProcAddress "glDebugMessageCallbackAMD")

{-# NOINLINE glDebugMessageCallbackAMDFunPtr #-}

glDebugMessageEnableAMD :: MonadIO m => GLenum -> GLenum -> GLsizei -> Ptr GLuint -> GLboolean -> m ()
glDebugMessageEnableAMD = ffienumenumsizeiPtruintbooleanIOV glDebugMessageEnableAMDFunPtr

glDebugMessageEnableAMDFunPtr :: FunPtr (GLenum -> GLenum -> GLsizei -> Ptr GLuint -> GLboolean -> IO ())
glDebugMessageEnableAMDFunPtr = unsafePerformIO (getProcAddress "glDebugMessageEnableAMD")

{-# NOINLINE glDebugMessageEnableAMDFunPtr #-}

glDebugMessageInsertAMD :: MonadIO m => GLenum -> GLenum -> GLuint -> GLsizei -> Ptr GLchar -> m ()
glDebugMessageInsertAMD = ffienumenumuintsizeiPtrcharIOV glDebugMessageInsertAMDFunPtr

glDebugMessageInsertAMDFunPtr :: FunPtr (GLenum -> GLenum -> GLuint -> GLsizei -> Ptr GLchar -> IO ())
glDebugMessageInsertAMDFunPtr = unsafePerformIO (getProcAddress "glDebugMessageInsertAMD")

{-# NOINLINE glDebugMessageInsertAMDFunPtr #-}

glGetDebugMessageLogAMD :: MonadIO m => GLuint -> GLsizei -> Ptr GLenum -> Ptr GLuint -> Ptr GLuint -> Ptr GLsizei -> Ptr GLchar -> m GLuint
glGetDebugMessageLogAMD = ffiuintsizeiPtrenumPtruintPtruintPtrsizeiPtrcharIOuint glGetDebugMessageLogAMDFunPtr

glGetDebugMessageLogAMDFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLenum -> Ptr GLuint -> Ptr GLuint -> Ptr GLsizei -> Ptr GLchar -> IO GLuint)
glGetDebugMessageLogAMDFunPtr = unsafePerformIO (getProcAddress "glGetDebugMessageLogAMD")

{-# NOINLINE glGetDebugMessageLogAMDFunPtr #-}

pattern GL_DEBUG_CATEGORY_API_ERROR_AMD = 0x9149 :: GLenum

pattern GL_DEBUG_CATEGORY_APPLICATION_AMD = 0x914F :: GLenum

pattern GL_DEBUG_CATEGORY_DEPRECATION_AMD = 0x914B :: GLenum

pattern GL_DEBUG_CATEGORY_OTHER_AMD = 0x9150 :: GLenum

pattern GL_DEBUG_CATEGORY_PERFORMANCE_AMD = 0x914D :: GLenum

pattern GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD = 0x914E :: GLenum

pattern GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD = 0x914C :: GLenum

pattern GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD = 0x914A :: GLenum

pattern GL_DEBUG_LOGGED_MESSAGES_AMD = 0x9145 :: GLenum

pattern GL_DEBUG_SEVERITY_HIGH_AMD = 0x9146 :: GLenum

pattern GL_DEBUG_SEVERITY_LOW_AMD = 0x9148 :: GLenum

pattern GL_DEBUG_SEVERITY_MEDIUM_AMD = 0x9147 :: GLenum

pattern GL_MAX_DEBUG_LOGGED_MESSAGES_AMD = 0x9144 :: GLenum

pattern GL_MAX_DEBUG_MESSAGE_LENGTH_AMD = 0x9143 :: GLenum