-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.EXT.SeparateShaderObjects (
  -- * Extension Support
    gl_EXT_separate_shader_objects

  -- * GL_EXT_separate_shader_objects
  , glActiveProgramEXT
  , glActiveShaderProgramEXT
  , glBindProgramPipelineEXT
  , glCreateShaderProgramEXT
  , glCreateShaderProgramvEXT
  , glDeleteProgramPipelinesEXT
  , glGenProgramPipelinesEXT
  , glGetProgramPipelineInfoLogEXT
  , glGetProgramPipelineivEXT
  , glIsProgramPipelineEXT
  , glProgramParameteriEXT
  , glProgramUniform1fEXT
  , glProgramUniform1fvEXT
  , glProgramUniform1iEXT
  , glProgramUniform1ivEXT
  , glProgramUniform1uiEXT
  , glProgramUniform1uivEXT
  , glProgramUniform2fEXT
  , glProgramUniform2fvEXT
  , glProgramUniform2iEXT
  , glProgramUniform2ivEXT
  , glProgramUniform2uiEXT
  , glProgramUniform2uivEXT
  , glProgramUniform3fEXT
  , glProgramUniform3fvEXT
  , glProgramUniform3iEXT
  , glProgramUniform3ivEXT
  , glProgramUniform3uiEXT
  , glProgramUniform3uivEXT
  , glProgramUniform4fEXT
  , glProgramUniform4fvEXT
  , glProgramUniform4iEXT
  , glProgramUniform4ivEXT
  , glProgramUniform4uiEXT
  , glProgramUniform4uivEXT
  , glProgramUniformMatrix2fvEXT
  , glProgramUniformMatrix2x3fvEXT
  , glProgramUniformMatrix2x4fvEXT
  , glProgramUniformMatrix3fvEXT
  , glProgramUniformMatrix3x2fvEXT
  , glProgramUniformMatrix3x4fvEXT
  , glProgramUniformMatrix4fvEXT
  , glProgramUniformMatrix4x2fvEXT
  , glProgramUniformMatrix4x3fvEXT
  , glUseProgramStagesEXT
  , glUseShaderProgramEXT
  , glValidateProgramPipelineEXT
  , pattern GL_ACTIVE_PROGRAM_EXT
  , pattern GL_ALL_SHADER_BITS_EXT
  , pattern GL_FRAGMENT_SHADER_BIT_EXT
  , pattern GL_PROGRAM_PIPELINE_BINDING_EXT
  , pattern GL_PROGRAM_SEPARABLE_EXT
  , pattern GL_VERTEX_SHADER_BIT_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_separate_shader_objects :: Bool
gl_EXT_separate_shader_objects = member "GL_EXT_separate_shader_objects" extensions

glActiveProgramEXT :: MonadIO m => GLuint -> m ()
glActiveProgramEXT = ffiuintIOV glActiveProgramEXTFunPtr

glActiveProgramEXTFunPtr :: FunPtr (GLuint -> IO ())
glActiveProgramEXTFunPtr = unsafePerformIO (getProcAddress "glActiveProgramEXT")

{-# NOINLINE glActiveProgramEXTFunPtr #-}

glActiveShaderProgramEXT :: MonadIO m => GLuint -> GLuint -> m ()
glActiveShaderProgramEXT = ffiuintuintIOV glActiveShaderProgramEXTFunPtr

glActiveShaderProgramEXTFunPtr :: FunPtr (GLuint -> GLuint -> IO ())
glActiveShaderProgramEXTFunPtr = unsafePerformIO (getProcAddress "glActiveShaderProgramEXT")

{-# NOINLINE glActiveShaderProgramEXTFunPtr #-}

glBindProgramPipelineEXT :: MonadIO m => GLuint -> m ()
glBindProgramPipelineEXT = ffiuintIOV glBindProgramPipelineEXTFunPtr

glBindProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glBindProgramPipelineEXTFunPtr = unsafePerformIO (getProcAddress "glBindProgramPipelineEXT")

{-# NOINLINE glBindProgramPipelineEXTFunPtr #-}

glCreateShaderProgramEXT :: MonadIO m => GLenum -> Ptr GLchar -> m GLuint
glCreateShaderProgramEXT = ffienumPtrcharIOuint glCreateShaderProgramEXTFunPtr

glCreateShaderProgramEXTFunPtr :: FunPtr (GLenum -> Ptr GLchar -> IO GLuint)
glCreateShaderProgramEXTFunPtr = unsafePerformIO (getProcAddress "glCreateShaderProgramEXT")

{-# NOINLINE glCreateShaderProgramEXTFunPtr #-}

glCreateShaderProgramvEXT :: MonadIO m => GLenum -> GLsizei -> Ptr GLchar -> m GLuint
glCreateShaderProgramvEXT = ffienumsizeiPtrcharIOuint glCreateShaderProgramvEXTFunPtr

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

{-# NOINLINE glCreateShaderProgramvEXTFunPtr #-}

glDeleteProgramPipelinesEXT :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteProgramPipelinesEXT = ffisizeiPtruintIOV glDeleteProgramPipelinesEXTFunPtr

glDeleteProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteProgramPipelinesEXTFunPtr = unsafePerformIO (getProcAddress "glDeleteProgramPipelinesEXT")

{-# NOINLINE glDeleteProgramPipelinesEXTFunPtr #-}

glGenProgramPipelinesEXT :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenProgramPipelinesEXT = ffisizeiPtruintIOV glGenProgramPipelinesEXTFunPtr

glGenProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenProgramPipelinesEXTFunPtr = unsafePerformIO (getProcAddress "glGenProgramPipelinesEXT")

{-# NOINLINE glGenProgramPipelinesEXTFunPtr #-}

glGetProgramPipelineInfoLogEXT :: MonadIO m => GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> m ()
glGetProgramPipelineInfoLogEXT = ffiuintsizeiPtrsizeiPtrcharIOV glGetProgramPipelineInfoLogEXTFunPtr

glGetProgramPipelineInfoLogEXTFunPtr :: FunPtr (GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())
glGetProgramPipelineInfoLogEXTFunPtr = unsafePerformIO (getProcAddress "glGetProgramPipelineInfoLogEXT")

{-# NOINLINE glGetProgramPipelineInfoLogEXTFunPtr #-}

glGetProgramPipelineivEXT :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetProgramPipelineivEXT = ffiuintenumPtrintIOV glGetProgramPipelineivEXTFunPtr

glGetProgramPipelineivEXTFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetProgramPipelineivEXTFunPtr = unsafePerformIO (getProcAddress "glGetProgramPipelineivEXT")

{-# NOINLINE glGetProgramPipelineivEXTFunPtr #-}

glIsProgramPipelineEXT :: MonadIO m => GLuint -> m GLboolean
glIsProgramPipelineEXT = ffiuintIOboolean glIsProgramPipelineEXTFunPtr

glIsProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsProgramPipelineEXTFunPtr = unsafePerformIO (getProcAddress "glIsProgramPipelineEXT")

{-# NOINLINE glIsProgramPipelineEXTFunPtr #-}

glUseProgramStagesEXT :: MonadIO m => GLuint -> GLbitfield -> GLuint -> m ()
glUseProgramStagesEXT = ffiuintbitfielduintIOV glUseProgramStagesEXTFunPtr

glUseProgramStagesEXTFunPtr :: FunPtr (GLuint -> GLbitfield -> GLuint -> IO ())
glUseProgramStagesEXTFunPtr = unsafePerformIO (getProcAddress "glUseProgramStagesEXT")

{-# NOINLINE glUseProgramStagesEXTFunPtr #-}

glUseShaderProgramEXT :: MonadIO m => GLenum -> GLuint -> m ()
glUseShaderProgramEXT = ffienumuintIOV glUseShaderProgramEXTFunPtr

glUseShaderProgramEXTFunPtr :: FunPtr (GLenum -> GLuint -> IO ())
glUseShaderProgramEXTFunPtr = unsafePerformIO (getProcAddress "glUseShaderProgramEXT")

{-# NOINLINE glUseShaderProgramEXTFunPtr #-}

glValidateProgramPipelineEXT :: MonadIO m => GLuint -> m ()
glValidateProgramPipelineEXT = ffiuintIOV glValidateProgramPipelineEXTFunPtr

glValidateProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glValidateProgramPipelineEXTFunPtr = unsafePerformIO (getProcAddress "glValidateProgramPipelineEXT")

{-# NOINLINE glValidateProgramPipelineEXTFunPtr #-}

pattern GL_ACTIVE_PROGRAM_EXT = 0x8B8D :: GLenum

pattern GL_ALL_SHADER_BITS_EXT = 0xFFFFFFFF :: GLenum

pattern GL_FRAGMENT_SHADER_BIT_EXT = 0x00000002 :: GLenum

pattern GL_PROGRAM_PIPELINE_BINDING_EXT = 0x825A :: GLenum

pattern GL_PROGRAM_SEPARABLE_EXT = 0x8258 :: GLenum

pattern GL_VERTEX_SHADER_BIT_EXT = 0x00000001 :: GLenum