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

  -- * GL_OES_vertex_array_object
  , glBindVertexArrayOES
  , glDeleteVertexArraysOES
  , glGenVertexArraysOES
  , glIsVertexArrayOES
  , pattern GL_VERTEX_ARRAY_BINDING_OES
) 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_OES_vertex_array_object :: Bool
gl_OES_vertex_array_object = member "GL_OES_vertex_array_object" extensions

glBindVertexArrayOES :: MonadIO m => GLuint -> m ()
glBindVertexArrayOES = ffiuintIOV glBindVertexArrayOESFunPtr

glBindVertexArrayOESFunPtr :: FunPtr (GLuint -> IO ())
glBindVertexArrayOESFunPtr = unsafePerformIO (getProcAddress "glBindVertexArrayOES")

{-# NOINLINE glBindVertexArrayOESFunPtr #-}

glDeleteVertexArraysOES :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteVertexArraysOES = ffisizeiPtruintIOV glDeleteVertexArraysOESFunPtr

glDeleteVertexArraysOESFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteVertexArraysOESFunPtr = unsafePerformIO (getProcAddress "glDeleteVertexArraysOES")

{-# NOINLINE glDeleteVertexArraysOESFunPtr #-}

glGenVertexArraysOES :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenVertexArraysOES = ffisizeiPtruintIOV glGenVertexArraysOESFunPtr

glGenVertexArraysOESFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenVertexArraysOESFunPtr = unsafePerformIO (getProcAddress "glGenVertexArraysOES")

{-# NOINLINE glGenVertexArraysOESFunPtr #-}

glIsVertexArrayOES :: MonadIO m => GLuint -> m GLboolean
glIsVertexArrayOES = ffiuintIOboolean glIsVertexArrayOESFunPtr

glIsVertexArrayOESFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsVertexArrayOESFunPtr = unsafePerformIO (getProcAddress "glIsVertexArrayOES")

{-# NOINLINE glIsVertexArrayOESFunPtr #-}

pattern GL_VERTEX_ARRAY_BINDING_OES = 0x85B5