-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.ARB.VertexBufferObject (
  -- * Extension Support
    gl_ARB_vertex_buffer_object

  -- * GL_ARB_vertex_buffer_object
  , glBindBufferARB
  , glBufferDataARB
  , glBufferSubDataARB
  , glDeleteBuffersARB
  , glGenBuffersARB
  , glGetBufferParameterivARB
  , glGetBufferPointervARB
  , glGetBufferSubDataARB
  , glIsBufferARB
  , glMapBufferARB
  , glUnmapBufferARB
  , pattern GL_ARRAY_BUFFER_ARB
  , pattern GL_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_BUFFER_ACCESS_ARB
  , pattern GL_BUFFER_MAPPED_ARB
  , pattern GL_BUFFER_MAP_POINTER_ARB
  , pattern GL_BUFFER_SIZE_ARB
  , pattern GL_BUFFER_USAGE_ARB
  , pattern GL_COLOR_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_DYNAMIC_COPY_ARB
  , pattern GL_DYNAMIC_DRAW_ARB
  , pattern GL_DYNAMIC_READ_ARB
  , pattern GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_ELEMENT_ARRAY_BUFFER_ARB
  , pattern GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_INDEX_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_NORMAL_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_READ_ONLY_ARB
  , pattern GL_READ_WRITE_ARB
  , pattern GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_STATIC_COPY_ARB
  , pattern GL_STATIC_DRAW_ARB
  , pattern GL_STATIC_READ_ARB
  , pattern GL_STREAM_COPY_ARB
  , pattern GL_STREAM_DRAW_ARB
  , pattern GL_STREAM_READ_ARB
  , pattern GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_VERTEX_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB
  , pattern GL_WRITE_ONLY_ARB
) 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_ARB_vertex_buffer_object :: Bool
gl_ARB_vertex_buffer_object = member "GL_ARB_vertex_buffer_object" extensions

glBindBufferARB :: MonadIO m => GLenum -> GLuint -> m ()
glBindBufferARB = ffienumuintIOV glBindBufferARBFunPtr

glBindBufferARBFunPtr :: FunPtr (GLenum -> GLuint -> IO ())
glBindBufferARBFunPtr = unsafePerformIO (getProcAddress "glBindBufferARB")

{-# NOINLINE glBindBufferARBFunPtr #-}

glBufferDataARB :: MonadIO m => GLenum -> GLsizeiptrARB -> Ptr () -> GLenum -> m ()
glBufferDataARB = ffienumsizeiptrARBPtrVenumIOV glBufferDataARBFunPtr

glBufferDataARBFunPtr :: FunPtr (GLenum -> GLsizeiptrARB -> Ptr () -> GLenum -> IO ())
glBufferDataARBFunPtr = unsafePerformIO (getProcAddress "glBufferDataARB")

{-# NOINLINE glBufferDataARBFunPtr #-}

glBufferSubDataARB :: MonadIO m => GLenum -> GLintptrARB -> GLsizeiptrARB -> Ptr () -> m ()
glBufferSubDataARB = ffienumintptrARBsizeiptrARBPtrVIOV glBufferSubDataARBFunPtr

glBufferSubDataARBFunPtr :: FunPtr (GLenum -> GLintptrARB -> GLsizeiptrARB -> Ptr () -> IO ())
glBufferSubDataARBFunPtr = unsafePerformIO (getProcAddress "glBufferSubDataARB")

{-# NOINLINE glBufferSubDataARBFunPtr #-}

glDeleteBuffersARB :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteBuffersARB = ffisizeiPtruintIOV glDeleteBuffersARBFunPtr

glDeleteBuffersARBFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteBuffersARBFunPtr = unsafePerformIO (getProcAddress "glDeleteBuffersARB")

{-# NOINLINE glDeleteBuffersARBFunPtr #-}

glGenBuffersARB :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenBuffersARB = ffisizeiPtruintIOV glGenBuffersARBFunPtr

glGenBuffersARBFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenBuffersARBFunPtr = unsafePerformIO (getProcAddress "glGenBuffersARB")

{-# NOINLINE glGenBuffersARBFunPtr #-}

glGetBufferParameterivARB :: MonadIO m => GLenum -> GLenum -> Ptr GLint -> m ()
glGetBufferParameterivARB = ffienumenumPtrintIOV glGetBufferParameterivARBFunPtr

glGetBufferParameterivARBFunPtr :: FunPtr (GLenum -> GLenum -> Ptr GLint -> IO ())
glGetBufferParameterivARBFunPtr = unsafePerformIO (getProcAddress "glGetBufferParameterivARB")

{-# NOINLINE glGetBufferParameterivARBFunPtr #-}

glGetBufferPointervARB :: MonadIO m => GLenum -> GLenum -> Ptr () -> m ()
glGetBufferPointervARB = ffienumenumPtrVIOV glGetBufferPointervARBFunPtr

glGetBufferPointervARBFunPtr :: FunPtr (GLenum -> GLenum -> Ptr () -> IO ())
glGetBufferPointervARBFunPtr = unsafePerformIO (getProcAddress "glGetBufferPointervARB")

{-# NOINLINE glGetBufferPointervARBFunPtr #-}

glGetBufferSubDataARB :: MonadIO m => GLenum -> GLintptrARB -> GLsizeiptrARB -> Ptr () -> m ()
glGetBufferSubDataARB = ffienumintptrARBsizeiptrARBPtrVIOV glGetBufferSubDataARBFunPtr

glGetBufferSubDataARBFunPtr :: FunPtr (GLenum -> GLintptrARB -> GLsizeiptrARB -> Ptr () -> IO ())
glGetBufferSubDataARBFunPtr = unsafePerformIO (getProcAddress "glGetBufferSubDataARB")

{-# NOINLINE glGetBufferSubDataARBFunPtr #-}

glIsBufferARB :: MonadIO m => GLuint -> m GLboolean
glIsBufferARB = ffiuintIOboolean glIsBufferARBFunPtr

glIsBufferARBFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsBufferARBFunPtr = unsafePerformIO (getProcAddress "glIsBufferARB")

{-# NOINLINE glIsBufferARBFunPtr #-}

glMapBufferARB :: MonadIO m => GLenum -> GLenum -> m (Ptr ())
glMapBufferARB = ffienumenumIOPtrV glMapBufferARBFunPtr

glMapBufferARBFunPtr :: FunPtr (GLenum -> GLenum -> IO (Ptr ()))
glMapBufferARBFunPtr = unsafePerformIO (getProcAddress "glMapBufferARB")

{-# NOINLINE glMapBufferARBFunPtr #-}

glUnmapBufferARB :: MonadIO m => GLenum -> m GLboolean
glUnmapBufferARB = ffienumIOboolean glUnmapBufferARBFunPtr

glUnmapBufferARBFunPtr :: FunPtr (GLenum -> IO GLboolean)
glUnmapBufferARBFunPtr = unsafePerformIO (getProcAddress "glUnmapBufferARB")

{-# NOINLINE glUnmapBufferARBFunPtr #-}

pattern GL_ARRAY_BUFFER_ARB = 0x8892 :: GLenum

pattern GL_ARRAY_BUFFER_BINDING_ARB = 0x8894 :: GLenum

pattern GL_BUFFER_ACCESS_ARB = 0x88BB :: GLenum

pattern GL_BUFFER_MAPPED_ARB = 0x88BC :: GLenum

pattern GL_BUFFER_MAP_POINTER_ARB = 0x88BD :: GLenum

pattern GL_BUFFER_SIZE_ARB = 0x8764 :: GLenum

pattern GL_BUFFER_USAGE_ARB = 0x8765 :: GLenum

pattern GL_COLOR_ARRAY_BUFFER_BINDING_ARB = 0x8898 :: GLenum

pattern GL_DYNAMIC_COPY_ARB = 0x88EA :: GLenum

pattern GL_DYNAMIC_DRAW_ARB = 0x88E8 :: GLenum

pattern GL_DYNAMIC_READ_ARB = 0x88E9 :: GLenum

pattern GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB = 0x889B :: GLenum

pattern GL_ELEMENT_ARRAY_BUFFER_ARB = 0x8893 :: GLenum

pattern GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB = 0x8895 :: GLenum

pattern GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB = 0x889D :: GLenum

pattern GL_INDEX_ARRAY_BUFFER_BINDING_ARB = 0x8899 :: GLenum

pattern GL_NORMAL_ARRAY_BUFFER_BINDING_ARB = 0x8897 :: GLenum

pattern GL_READ_ONLY_ARB = 0x88B8 :: GLenum

pattern GL_READ_WRITE_ARB = 0x88BA :: GLenum

pattern GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB = 0x889C :: GLenum

pattern GL_STATIC_COPY_ARB = 0x88E6 :: GLenum

pattern GL_STATIC_DRAW_ARB = 0x88E4 :: GLenum

pattern GL_STATIC_READ_ARB = 0x88E5 :: GLenum

pattern GL_STREAM_COPY_ARB = 0x88E2 :: GLenum

pattern GL_STREAM_DRAW_ARB = 0x88E0 :: GLenum

pattern GL_STREAM_READ_ARB = 0x88E1 :: GLenum

pattern GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB = 0x889A :: GLenum

pattern GL_VERTEX_ARRAY_BUFFER_BINDING_ARB = 0x8896 :: GLenum

pattern GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB = 0x889F :: GLenum

pattern GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB = 0x889E :: GLenum

pattern GL_WRITE_ONLY_ARB = 0x88B9 :: GLenum