-- This file was automatically generated.
{-# LANGUAGE CPP, ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Ext.EXT.TransformFeedback (
  -- * Extension Support
    gl_EXT_transform_feedback

  -- * GL_EXT_transform_feedback
  , glBeginTransformFeedbackEXT
  , glBindBufferBaseEXT
  , glBindBufferOffsetEXT
  , glBindBufferRangeEXT
  , glEndTransformFeedbackEXT
  , glGetTransformFeedbackVaryingEXT
  , glTransformFeedbackVaryingsEXT
  , pattern GL_INTERLEAVED_ATTRIBS_EXT
  , pattern GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT
  , pattern GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT
  , pattern GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT
  , pattern GL_PRIMITIVES_GENERATED_EXT
  , pattern GL_RASTERIZER_DISCARD_EXT
  , pattern GL_SEPARATE_ATTRIBS_EXT
  , pattern GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT
  , pattern GL_TRANSFORM_FEEDBACK_BUFFER_EXT
  , pattern GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT
  , pattern GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT
  , pattern GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT
  , pattern GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT
  , pattern GL_TRANSFORM_FEEDBACK_VARYINGS_EXT
  , pattern GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT
) 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.Internal.Shared
import Graphics.GL.Types
import System.IO.Unsafe

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

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

-- | Usage: @'glBeginTransformFeedbackEXT' primitiveMode@
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glBeginTransformFeedback'.


glBeginTransformFeedbackEXT :: MonadIO m => GLenum -> m ()
glBeginTransformFeedbackEXT :: GLenum -> m ()
glBeginTransformFeedbackEXT = FunPtr (GLenum -> IO ()) -> GLenum -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLenum -> IO ()) -> GLenum -> m ()
ffienumIOV FunPtr (GLenum -> IO ())
glBeginTransformFeedbackEXTFunPtr

glBeginTransformFeedbackEXTFunPtr :: FunPtr (GLenum -> IO ())
glBeginTransformFeedbackEXTFunPtr :: FunPtr (GLenum -> IO ())
glBeginTransformFeedbackEXTFunPtr = IO (FunPtr (GLenum -> IO ())) -> FunPtr (GLenum -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLenum -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glBeginTransformFeedbackEXT")

{-# NOINLINE glBeginTransformFeedbackEXTFunPtr #-}

-- | Usage: @'glBindBufferBaseEXT' target index buffer@
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glBindBufferBase'.


glBindBufferBaseEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> m ()
glBindBufferBaseEXT :: GLenum -> GLenum -> GLenum -> m ()
glBindBufferBaseEXT = FunPtr (GLenum -> GLenum -> GLenum -> IO ())
-> GLenum -> GLenum -> GLenum -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLenum -> GLenum -> GLenum -> IO ())
-> GLenum -> GLenum -> GLenum -> m ()
ffienumuintuintIOV FunPtr (GLenum -> GLenum -> GLenum -> IO ())
glBindBufferBaseEXTFunPtr

glBindBufferBaseEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> IO ())
glBindBufferBaseEXTFunPtr :: FunPtr (GLenum -> GLenum -> GLenum -> IO ())
glBindBufferBaseEXTFunPtr = IO (FunPtr (GLenum -> GLenum -> GLenum -> IO ()))
-> FunPtr (GLenum -> GLenum -> GLenum -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLenum -> GLenum -> GLenum -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glBindBufferBaseEXT")

{-# NOINLINE glBindBufferBaseEXTFunPtr #-}

-- | Usage: @'glBindBufferOffsetEXT' target index buffer offset@
--
-- The parameter @offset@ is a @BufferOffset@.


glBindBufferOffsetEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> GLintptr -> m ()
glBindBufferOffsetEXT :: GLenum -> GLenum -> GLenum -> GLintptr -> m ()
glBindBufferOffsetEXT = FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ())
-> GLenum -> GLenum -> GLenum -> GLintptr -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ())
-> GLenum -> GLenum -> GLenum -> GLintptr -> m ()
ffienumuintuintintptrIOV FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ())
glBindBufferOffsetEXTFunPtr

glBindBufferOffsetEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> GLintptr -> IO ())
glBindBufferOffsetEXTFunPtr :: FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ())
glBindBufferOffsetEXTFunPtr = IO (FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ()))
-> FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO (FunPtr (GLenum -> GLenum -> GLenum -> GLintptr -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glBindBufferOffsetEXT")

{-# NOINLINE glBindBufferOffsetEXTFunPtr #-}

-- | Usage: @'glBindBufferRangeEXT' target index buffer offset size@
--
-- The parameter @offset@ is a @BufferOffset@.
--
-- The parameter @size@ is a @BufferSize@.
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glBindBufferRange'.


glBindBufferRangeEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> GLintptr -> GLsizeiptr -> m ()
glBindBufferRangeEXT :: GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> m ()
glBindBufferRangeEXT = FunPtr
  (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ())
-> GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ())
-> GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> m ()
ffienumuintuintintptrsizeiptrIOV FunPtr
  (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ())
glBindBufferRangeEXTFunPtr

glBindBufferRangeEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> GLintptr -> GLsizeiptr -> IO ())
glBindBufferRangeEXTFunPtr :: FunPtr
  (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ())
glBindBufferRangeEXTFunPtr = IO
  (FunPtr
     (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ()))
-> FunPtr
     (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (GLenum -> GLenum -> GLenum -> GLintptr -> GLintptr -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glBindBufferRangeEXT")

{-# NOINLINE glBindBufferRangeEXTFunPtr #-}

-- | Usage: @'glEndTransformFeedbackEXT'@
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glEndTransformFeedback'.


glEndTransformFeedbackEXT :: MonadIO m => m ()
glEndTransformFeedbackEXT :: m ()
glEndTransformFeedbackEXT = FunPtr (IO ()) -> m ()
forall (m :: * -> *). MonadIO m => FunPtr (IO ()) -> m ()
ffiIOV FunPtr (IO ())
glEndTransformFeedbackEXTFunPtr

glEndTransformFeedbackEXTFunPtr :: FunPtr (IO ())
glEndTransformFeedbackEXTFunPtr :: FunPtr (IO ())
glEndTransformFeedbackEXTFunPtr = IO (FunPtr (IO ())) -> FunPtr (IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glEndTransformFeedbackEXT")

{-# NOINLINE glEndTransformFeedbackEXTFunPtr #-}

-- | Usage: @'glGetTransformFeedbackVaryingEXT' program index bufSize length size type name@
--
-- The length of @length@ should be @1@.
--
-- The length of @size@ should be @1@.
--
-- The length of @type@ should be @1@.
--
-- The length of @name@ should be @bufSize@.
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glGetTransformFeedbackVarying'.


glGetTransformFeedbackVaryingEXT :: MonadIO m => GLuint -> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> Ptr GLenum -> Ptr GLchar -> m ()
glGetTransformFeedbackVaryingEXT :: GLenum
-> GLenum
-> GLsizei
-> Ptr GLsizei
-> Ptr GLsizei
-> Ptr GLenum
-> Ptr GLchar
-> m ()
glGetTransformFeedbackVaryingEXT = FunPtr
  (GLenum
   -> GLenum
   -> GLsizei
   -> Ptr GLsizei
   -> Ptr GLsizei
   -> Ptr GLenum
   -> Ptr GLchar
   -> IO ())
-> GLenum
-> GLenum
-> GLsizei
-> Ptr GLsizei
-> Ptr GLsizei
-> Ptr GLenum
-> Ptr GLchar
-> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLenum
   -> GLenum
   -> GLsizei
   -> Ptr GLsizei
   -> Ptr GLsizei
   -> Ptr GLenum
   -> Ptr GLchar
   -> IO ())
-> GLenum
-> GLenum
-> GLsizei
-> Ptr GLsizei
-> Ptr GLsizei
-> Ptr GLenum
-> Ptr GLchar
-> m ()
ffiuintuintsizeiPtrsizeiPtrsizeiPtrenumPtrcharIOV FunPtr
  (GLenum
   -> GLenum
   -> GLsizei
   -> Ptr GLsizei
   -> Ptr GLsizei
   -> Ptr GLenum
   -> Ptr GLchar
   -> IO ())
glGetTransformFeedbackVaryingEXTFunPtr

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

{-# NOINLINE glGetTransformFeedbackVaryingEXTFunPtr #-}

-- | Usage: @'glTransformFeedbackVaryingsEXT' program count varyings bufferMode@
--
-- The length of @varyings@ should be @count@.
--
-- This command is an alias for 'Graphics.GL.Internal.Shared.glTransformFeedbackVaryings'.


glTransformFeedbackVaryingsEXT :: MonadIO m => GLuint -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> m ()
glTransformFeedbackVaryingsEXT :: GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> m ()
glTransformFeedbackVaryingsEXT = FunPtr (GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> IO ())
-> GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> IO ())
-> GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> m ()
ffiuintsizeiPtrPtrcharenumIOV FunPtr (GLenum -> GLsizei -> Ptr (Ptr GLchar) -> GLenum -> IO ())
glTransformFeedbackVaryingsEXTFunPtr

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

{-# NOINLINE glTransformFeedbackVaryingsEXTFunPtr #-}

pattern $bGL_INTERLEAVED_ATTRIBS_EXT :: a
$mGL_INTERLEAVED_ATTRIBS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_INTERLEAVED_ATTRIBS_EXT = 0x8C8C

pattern $bGL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT :: a
$mGL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT = 0x8C8A

pattern $bGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT :: a
$mGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT = 0x8C8B

pattern $bGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT :: a
$mGL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT = 0x8C80

pattern $bGL_RASTERIZER_DISCARD_EXT :: a
$mGL_RASTERIZER_DISCARD_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_RASTERIZER_DISCARD_EXT = 0x8C89

pattern $bGL_SEPARATE_ATTRIBS_EXT :: a
$mGL_SEPARATE_ATTRIBS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_SEPARATE_ATTRIBS_EXT = 0x8C8D

pattern $bGL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT :: a
$mGL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT = 0x8C8F

pattern $bGL_TRANSFORM_FEEDBACK_BUFFER_EXT :: a
$mGL_TRANSFORM_FEEDBACK_BUFFER_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_BUFFER_EXT = 0x8C8E

pattern $bGL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT :: a
$mGL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT = 0x8C7F

pattern $bGL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT :: a
$mGL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT = 0x8C85

pattern $bGL_TRANSFORM_FEEDBACK_BUFFER_START_EXT :: a
$mGL_TRANSFORM_FEEDBACK_BUFFER_START_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT = 0x8C84

pattern $bGL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT :: a
$mGL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT = 0x8C88

pattern $bGL_TRANSFORM_FEEDBACK_VARYINGS_EXT :: a
$mGL_TRANSFORM_FEEDBACK_VARYINGS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_VARYINGS_EXT = 0x8C83

pattern $bGL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT :: a
$mGL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT = 0x8C76