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

gl_EXT_transform_feedback :: Bool
gl_EXT_transform_feedback = member "GL_EXT_transform_feedback" extensions

glBeginTransformFeedbackEXT :: MonadIO m => GLenum -> m ()
glBeginTransformFeedbackEXT = ffienumIOV glBeginTransformFeedbackEXTFunPtr

glBeginTransformFeedbackEXTFunPtr :: FunPtr (GLenum -> IO ())
glBeginTransformFeedbackEXTFunPtr = unsafePerformIO (getProcAddress "glBeginTransformFeedbackEXT")

{-# NOINLINE glBeginTransformFeedbackEXTFunPtr #-}

glBindBufferBaseEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> m ()
glBindBufferBaseEXT = ffienumuintuintIOV glBindBufferBaseEXTFunPtr

glBindBufferBaseEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> IO ())
glBindBufferBaseEXTFunPtr = unsafePerformIO (getProcAddress "glBindBufferBaseEXT")

{-# NOINLINE glBindBufferBaseEXTFunPtr #-}

glBindBufferOffsetEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> GLintptr -> m ()
glBindBufferOffsetEXT = ffienumuintuintintptrIOV glBindBufferOffsetEXTFunPtr

glBindBufferOffsetEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> GLintptr -> IO ())
glBindBufferOffsetEXTFunPtr = unsafePerformIO (getProcAddress "glBindBufferOffsetEXT")

{-# NOINLINE glBindBufferOffsetEXTFunPtr #-}

glBindBufferRangeEXT :: MonadIO m => GLenum -> GLuint -> GLuint -> GLintptr -> GLsizeiptr -> m ()
glBindBufferRangeEXT = ffienumuintuintintptrsizeiptrIOV glBindBufferRangeEXTFunPtr

glBindBufferRangeEXTFunPtr :: FunPtr (GLenum -> GLuint -> GLuint -> GLintptr -> GLsizeiptr -> IO ())
glBindBufferRangeEXTFunPtr = unsafePerformIO (getProcAddress "glBindBufferRangeEXT")

{-# NOINLINE glBindBufferRangeEXTFunPtr #-}

glEndTransformFeedbackEXT :: MonadIO m => m ()
glEndTransformFeedbackEXT = ffiIOV glEndTransformFeedbackEXTFunPtr

glEndTransformFeedbackEXTFunPtr :: FunPtr (IO ())
glEndTransformFeedbackEXTFunPtr = unsafePerformIO (getProcAddress "glEndTransformFeedbackEXT")

{-# NOINLINE glEndTransformFeedbackEXTFunPtr #-}

glGetTransformFeedbackVaryingEXT :: MonadIO m => GLuint -> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> Ptr GLenum -> Ptr GLchar -> m ()
glGetTransformFeedbackVaryingEXT = ffiuintuintsizeiPtrsizeiPtrsizeiPtrenumPtrcharIOV glGetTransformFeedbackVaryingEXTFunPtr

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

{-# NOINLINE glGetTransformFeedbackVaryingEXTFunPtr #-}

glTransformFeedbackVaryingsEXT :: MonadIO m => GLuint -> GLsizei -> Ptr GLchar -> GLenum -> m ()
glTransformFeedbackVaryingsEXT = ffiuintsizeiPtrcharenumIOV glTransformFeedbackVaryingsEXTFunPtr

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

{-# NOINLINE glTransformFeedbackVaryingsEXTFunPtr #-}

pattern GL_INTERLEAVED_ATTRIBS_EXT = 0x8C8C

pattern GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT = 0x8C8A

pattern GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT = 0x8C8B

pattern GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT = 0x8C80

pattern GL_RASTERIZER_DISCARD_EXT = 0x8C89

pattern GL_SEPARATE_ATTRIBS_EXT = 0x8C8D

pattern GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT = 0x8C8F

pattern GL_TRANSFORM_FEEDBACK_BUFFER_EXT = 0x8C8E

pattern GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT = 0x8C7F

pattern GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT = 0x8C85

pattern GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT = 0x8C84

pattern GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT = 0x8C88

pattern GL_TRANSFORM_FEEDBACK_VARYINGS_EXT = 0x8C83

pattern GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT = 0x8C76