-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.ATI.VertexArrayObject (
  -- * Extension Support
    gl_ATI_vertex_array_object

  -- * GL_ATI_vertex_array_object
  , glArrayObjectATI
  , glFreeObjectBufferATI
  , glGetArrayObjectfvATI
  , glGetArrayObjectivATI
  , glGetObjectBufferfvATI
  , glGetObjectBufferivATI
  , glGetVariantArrayObjectfvATI
  , glGetVariantArrayObjectivATI
  , glIsObjectBufferATI
  , glNewObjectBufferATI
  , glUpdateObjectBufferATI
  , glVariantArrayObjectATI
  , pattern GL_ARRAY_OBJECT_BUFFER_ATI
  , pattern GL_ARRAY_OBJECT_OFFSET_ATI
  , pattern GL_DISCARD_ATI
  , pattern GL_DYNAMIC_ATI
  , pattern GL_OBJECT_BUFFER_SIZE_ATI
  , pattern GL_OBJECT_BUFFER_USAGE_ATI
  , pattern GL_PRESERVE_ATI
  , pattern GL_STATIC_ATI
) 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_ATI_vertex_array_object :: Bool
gl_ATI_vertex_array_object = member "GL_ATI_vertex_array_object" extensions

glArrayObjectATI :: MonadIO m => GLenum -> GLint -> GLenum -> GLsizei -> GLuint -> GLuint -> m ()
glArrayObjectATI = ffienumintenumsizeiuintuintIOV glArrayObjectATIFunPtr

glArrayObjectATIFunPtr :: FunPtr (GLenum -> GLint -> GLenum -> GLsizei -> GLuint -> GLuint -> IO ())
glArrayObjectATIFunPtr = unsafePerformIO (getProcAddress "glArrayObjectATI")

{-# NOINLINE glArrayObjectATIFunPtr #-}

glFreeObjectBufferATI :: MonadIO m => GLuint -> m ()
glFreeObjectBufferATI = ffiuintIOV glFreeObjectBufferATIFunPtr

glFreeObjectBufferATIFunPtr :: FunPtr (GLuint -> IO ())
glFreeObjectBufferATIFunPtr = unsafePerformIO (getProcAddress "glFreeObjectBufferATI")

{-# NOINLINE glFreeObjectBufferATIFunPtr #-}

glGetArrayObjectfvATI :: MonadIO m => GLenum -> GLenum -> Ptr GLfloat -> m ()
glGetArrayObjectfvATI = ffienumenumPtrfloatIOV glGetArrayObjectfvATIFunPtr

glGetArrayObjectfvATIFunPtr :: FunPtr (GLenum -> GLenum -> Ptr GLfloat -> IO ())
glGetArrayObjectfvATIFunPtr = unsafePerformIO (getProcAddress "glGetArrayObjectfvATI")

{-# NOINLINE glGetArrayObjectfvATIFunPtr #-}

glGetArrayObjectivATI :: MonadIO m => GLenum -> GLenum -> Ptr GLint -> m ()
glGetArrayObjectivATI = ffienumenumPtrintIOV glGetArrayObjectivATIFunPtr

glGetArrayObjectivATIFunPtr :: FunPtr (GLenum -> GLenum -> Ptr GLint -> IO ())
glGetArrayObjectivATIFunPtr = unsafePerformIO (getProcAddress "glGetArrayObjectivATI")

{-# NOINLINE glGetArrayObjectivATIFunPtr #-}

glGetObjectBufferfvATI :: MonadIO m => GLuint -> GLenum -> Ptr GLfloat -> m ()
glGetObjectBufferfvATI = ffiuintenumPtrfloatIOV glGetObjectBufferfvATIFunPtr

glGetObjectBufferfvATIFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLfloat -> IO ())
glGetObjectBufferfvATIFunPtr = unsafePerformIO (getProcAddress "glGetObjectBufferfvATI")

{-# NOINLINE glGetObjectBufferfvATIFunPtr #-}

glGetObjectBufferivATI :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetObjectBufferivATI = ffiuintenumPtrintIOV glGetObjectBufferivATIFunPtr

glGetObjectBufferivATIFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetObjectBufferivATIFunPtr = unsafePerformIO (getProcAddress "glGetObjectBufferivATI")

{-# NOINLINE glGetObjectBufferivATIFunPtr #-}

glGetVariantArrayObjectfvATI :: MonadIO m => GLuint -> GLenum -> Ptr GLfloat -> m ()
glGetVariantArrayObjectfvATI = ffiuintenumPtrfloatIOV glGetVariantArrayObjectfvATIFunPtr

glGetVariantArrayObjectfvATIFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLfloat -> IO ())
glGetVariantArrayObjectfvATIFunPtr = unsafePerformIO (getProcAddress "glGetVariantArrayObjectfvATI")

{-# NOINLINE glGetVariantArrayObjectfvATIFunPtr #-}

glGetVariantArrayObjectivATI :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetVariantArrayObjectivATI = ffiuintenumPtrintIOV glGetVariantArrayObjectivATIFunPtr

glGetVariantArrayObjectivATIFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetVariantArrayObjectivATIFunPtr = unsafePerformIO (getProcAddress "glGetVariantArrayObjectivATI")

{-# NOINLINE glGetVariantArrayObjectivATIFunPtr #-}

glIsObjectBufferATI :: MonadIO m => GLuint -> m GLboolean
glIsObjectBufferATI = ffiuintIOboolean glIsObjectBufferATIFunPtr

glIsObjectBufferATIFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsObjectBufferATIFunPtr = unsafePerformIO (getProcAddress "glIsObjectBufferATI")

{-# NOINLINE glIsObjectBufferATIFunPtr #-}

glNewObjectBufferATI :: MonadIO m => GLsizei -> Ptr () -> GLenum -> m GLuint
glNewObjectBufferATI = ffisizeiPtrVenumIOuint glNewObjectBufferATIFunPtr

glNewObjectBufferATIFunPtr :: FunPtr (GLsizei -> Ptr () -> GLenum -> IO GLuint)
glNewObjectBufferATIFunPtr = unsafePerformIO (getProcAddress "glNewObjectBufferATI")

{-# NOINLINE glNewObjectBufferATIFunPtr #-}

glUpdateObjectBufferATI :: MonadIO m => GLuint -> GLuint -> GLsizei -> Ptr () -> GLenum -> m ()
glUpdateObjectBufferATI = ffiuintuintsizeiPtrVenumIOV glUpdateObjectBufferATIFunPtr

glUpdateObjectBufferATIFunPtr :: FunPtr (GLuint -> GLuint -> GLsizei -> Ptr () -> GLenum -> IO ())
glUpdateObjectBufferATIFunPtr = unsafePerformIO (getProcAddress "glUpdateObjectBufferATI")

{-# NOINLINE glUpdateObjectBufferATIFunPtr #-}

glVariantArrayObjectATI :: MonadIO m => GLuint -> GLenum -> GLsizei -> GLuint -> GLuint -> m ()
glVariantArrayObjectATI = ffiuintenumsizeiuintuintIOV glVariantArrayObjectATIFunPtr

glVariantArrayObjectATIFunPtr :: FunPtr (GLuint -> GLenum -> GLsizei -> GLuint -> GLuint -> IO ())
glVariantArrayObjectATIFunPtr = unsafePerformIO (getProcAddress "glVariantArrayObjectATI")

{-# NOINLINE glVariantArrayObjectATIFunPtr #-}

pattern GL_ARRAY_OBJECT_BUFFER_ATI = 0x8766

pattern GL_ARRAY_OBJECT_OFFSET_ATI = 0x8767

pattern GL_DISCARD_ATI = 0x8763

pattern GL_DYNAMIC_ATI = 0x8761

pattern GL_OBJECT_BUFFER_SIZE_ATI = 0x8764

pattern GL_OBJECT_BUFFER_USAGE_ATI = 0x8765

pattern GL_PRESERVE_ATI = 0x8762

pattern GL_STATIC_ATI = 0x8760