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

-- | Checks that the <https://www.khronos.org/registry/gles/extensions/EXT/EXT_separate_shader_objects.txt GL_EXT_separate_shader_objects> extension is available.

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

-- | Usage: @'glActiveProgramEXT' program@


glActiveProgramEXT :: MonadIO m => GLuint -> m ()
glActiveProgramEXT :: GLuint -> m ()
glActiveProgramEXT = FunPtr (GLuint -> IO ()) -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> IO ()) -> GLuint -> m ()
ffiuintIOV FunPtr (GLuint -> IO ())
glActiveProgramEXTFunPtr

glActiveProgramEXTFunPtr :: FunPtr (GLuint -> IO ())
glActiveProgramEXTFunPtr :: FunPtr (GLuint -> IO ())
glActiveProgramEXTFunPtr = IO (FunPtr (GLuint -> IO ())) -> FunPtr (GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glActiveProgramEXT")

{-# NOINLINE glActiveProgramEXTFunPtr #-}

-- | Usage: @'glActiveShaderProgramEXT' pipeline program@


glActiveShaderProgramEXT :: MonadIO m => GLuint -> GLuint -> m ()
glActiveShaderProgramEXT :: GLuint -> GLuint -> m ()
glActiveShaderProgramEXT = FunPtr (GLuint -> GLuint -> IO ()) -> GLuint -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLuint -> IO ()) -> GLuint -> GLuint -> m ()
ffiuintuintIOV FunPtr (GLuint -> GLuint -> IO ())
glActiveShaderProgramEXTFunPtr

glActiveShaderProgramEXTFunPtr :: FunPtr (GLuint -> GLuint -> IO ())
glActiveShaderProgramEXTFunPtr :: FunPtr (GLuint -> GLuint -> IO ())
glActiveShaderProgramEXTFunPtr = IO (FunPtr (GLuint -> GLuint -> IO ()))
-> FunPtr (GLuint -> GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glActiveShaderProgramEXT")

{-# NOINLINE glActiveShaderProgramEXTFunPtr #-}

-- | Usage: @'glBindProgramPipelineEXT' pipeline@


glBindProgramPipelineEXT :: MonadIO m => GLuint -> m ()
glBindProgramPipelineEXT :: GLuint -> m ()
glBindProgramPipelineEXT = FunPtr (GLuint -> IO ()) -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> IO ()) -> GLuint -> m ()
ffiuintIOV FunPtr (GLuint -> IO ())
glBindProgramPipelineEXTFunPtr

glBindProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glBindProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glBindProgramPipelineEXTFunPtr = IO (FunPtr (GLuint -> IO ())) -> FunPtr (GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glBindProgramPipelineEXT")

{-# NOINLINE glBindProgramPipelineEXTFunPtr #-}

-- | Usage: @'glCreateShaderProgramEXT' type string@


glCreateShaderProgramEXT :: MonadIO m => GLenum -> Ptr GLchar -> m GLuint
glCreateShaderProgramEXT :: GLuint -> Ptr GLchar -> m GLuint
glCreateShaderProgramEXT = FunPtr (GLuint -> Ptr GLchar -> IO GLuint)
-> GLuint -> Ptr GLchar -> m GLuint
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> Ptr GLchar -> IO GLuint)
-> GLuint -> Ptr GLchar -> m GLuint
ffienumPtrcharIOuint FunPtr (GLuint -> Ptr GLchar -> IO GLuint)
glCreateShaderProgramEXTFunPtr

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

{-# NOINLINE glCreateShaderProgramEXTFunPtr #-}

-- | Usage: @'glCreateShaderProgramvEXT' type count strings@
--
-- The length of @strings@ should be @count@.


glCreateShaderProgramvEXT :: MonadIO m => GLenum -> GLsizei -> Ptr (Ptr GLchar) -> m GLuint
glCreateShaderProgramvEXT :: GLuint -> GLsizei -> Ptr (Ptr GLchar) -> m GLuint
glCreateShaderProgramvEXT = FunPtr (GLuint -> GLsizei -> Ptr (Ptr GLchar) -> IO GLuint)
-> GLuint -> GLsizei -> Ptr (Ptr GLchar) -> m GLuint
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLsizei -> Ptr (Ptr GLchar) -> IO GLuint)
-> GLuint -> GLsizei -> Ptr (Ptr GLchar) -> m GLuint
ffienumsizeiPtrPtrcharIOuint FunPtr (GLuint -> GLsizei -> Ptr (Ptr GLchar) -> IO GLuint)
glCreateShaderProgramvEXTFunPtr

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

{-# NOINLINE glCreateShaderProgramvEXTFunPtr #-}

-- | Usage: @'glDeleteProgramPipelinesEXT' n pipelines@
--
-- The length of @pipelines@ should be @n@.


glDeleteProgramPipelinesEXT :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteProgramPipelinesEXT :: GLsizei -> Ptr GLuint -> m ()
glDeleteProgramPipelinesEXT = FunPtr (GLsizei -> Ptr GLuint -> IO ())
-> GLsizei -> Ptr GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLsizei -> Ptr GLuint -> IO ())
-> GLsizei -> Ptr GLuint -> m ()
ffisizeiPtruintIOV FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteProgramPipelinesEXTFunPtr

glDeleteProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteProgramPipelinesEXTFunPtr = IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
-> FunPtr (GLsizei -> Ptr GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glDeleteProgramPipelinesEXT")

{-# NOINLINE glDeleteProgramPipelinesEXTFunPtr #-}

-- | Usage: @'glGenProgramPipelinesEXT' n pipelines@
--
-- The length of @pipelines@ should be @n@.


glGenProgramPipelinesEXT :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenProgramPipelinesEXT :: GLsizei -> Ptr GLuint -> m ()
glGenProgramPipelinesEXT = FunPtr (GLsizei -> Ptr GLuint -> IO ())
-> GLsizei -> Ptr GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLsizei -> Ptr GLuint -> IO ())
-> GLsizei -> Ptr GLuint -> m ()
ffisizeiPtruintIOV FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenProgramPipelinesEXTFunPtr

glGenProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenProgramPipelinesEXTFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenProgramPipelinesEXTFunPtr = IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
-> FunPtr (GLsizei -> Ptr GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glGenProgramPipelinesEXT")

{-# NOINLINE glGenProgramPipelinesEXTFunPtr #-}

-- | Usage: @'glGetProgramPipelineInfoLogEXT' pipeline bufSize length infoLog@
--
-- The length of @length@ should be @1@.
--
-- The length of @infoLog@ should be @bufSize@.


glGetProgramPipelineInfoLogEXT :: MonadIO m => GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> m ()
glGetProgramPipelineInfoLogEXT :: GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> m ()
glGetProgramPipelineInfoLogEXT = FunPtr (GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())
-> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())
-> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> m ()
ffiuintsizeiPtrsizeiPtrcharIOV FunPtr (GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLchar -> IO ())
glGetProgramPipelineInfoLogEXTFunPtr

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

{-# NOINLINE glGetProgramPipelineInfoLogEXTFunPtr #-}

-- | Usage: @'glGetProgramPipelineivEXT' pipeline pname params@


glGetProgramPipelineivEXT :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetProgramPipelineivEXT :: GLuint -> GLuint -> Ptr GLsizei -> m ()
glGetProgramPipelineivEXT = FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
-> GLuint -> GLuint -> Ptr GLsizei -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
-> GLuint -> GLuint -> Ptr GLsizei -> m ()
ffiuintenumPtrintIOV FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
glGetProgramPipelineivEXTFunPtr

glGetProgramPipelineivEXTFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetProgramPipelineivEXTFunPtr :: FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
glGetProgramPipelineivEXTFunPtr = IO (FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ()))
-> FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glGetProgramPipelineivEXT")

{-# NOINLINE glGetProgramPipelineivEXTFunPtr #-}

-- | Usage: @'glIsProgramPipelineEXT' pipeline@


glIsProgramPipelineEXT :: MonadIO m => GLuint -> m GLboolean
glIsProgramPipelineEXT :: GLuint -> m GLboolean
glIsProgramPipelineEXT = FunPtr (GLuint -> IO GLboolean) -> GLuint -> m GLboolean
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> IO GLboolean) -> GLuint -> m GLboolean
ffiuintIOboolean FunPtr (GLuint -> IO GLboolean)
glIsProgramPipelineEXTFunPtr

glIsProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsProgramPipelineEXTFunPtr = IO (FunPtr (GLuint -> IO GLboolean))
-> FunPtr (GLuint -> IO GLboolean)
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> IO GLboolean))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glIsProgramPipelineEXT")

{-# NOINLINE glIsProgramPipelineEXTFunPtr #-}

-- | Usage: @'glUseProgramStagesEXT' pipeline stages program@


glUseProgramStagesEXT :: MonadIO m => GLuint -> GLbitfield -> GLuint -> m ()
glUseProgramStagesEXT :: GLuint -> GLuint -> GLuint -> m ()
glUseProgramStagesEXT = FunPtr (GLuint -> GLuint -> GLuint -> IO ())
-> GLuint -> GLuint -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLuint -> GLuint -> IO ())
-> GLuint -> GLuint -> GLuint -> m ()
ffiuintbitfielduintIOV FunPtr (GLuint -> GLuint -> GLuint -> IO ())
glUseProgramStagesEXTFunPtr

glUseProgramStagesEXTFunPtr :: FunPtr (GLuint -> GLbitfield -> GLuint -> IO ())
glUseProgramStagesEXTFunPtr :: FunPtr (GLuint -> GLuint -> GLuint -> IO ())
glUseProgramStagesEXTFunPtr = IO (FunPtr (GLuint -> GLuint -> GLuint -> IO ()))
-> FunPtr (GLuint -> GLuint -> GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> GLuint -> GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glUseProgramStagesEXT")

{-# NOINLINE glUseProgramStagesEXTFunPtr #-}

-- | Usage: @'glUseShaderProgramEXT' type program@


glUseShaderProgramEXT :: MonadIO m => GLenum -> GLuint -> m ()
glUseShaderProgramEXT :: GLuint -> GLuint -> m ()
glUseShaderProgramEXT = FunPtr (GLuint -> GLuint -> IO ()) -> GLuint -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLuint -> IO ()) -> GLuint -> GLuint -> m ()
ffienumuintIOV FunPtr (GLuint -> GLuint -> IO ())
glUseShaderProgramEXTFunPtr

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

{-# NOINLINE glUseShaderProgramEXTFunPtr #-}

-- | Usage: @'glValidateProgramPipelineEXT' pipeline@


glValidateProgramPipelineEXT :: MonadIO m => GLuint -> m ()
glValidateProgramPipelineEXT :: GLuint -> m ()
glValidateProgramPipelineEXT = FunPtr (GLuint -> IO ()) -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> IO ()) -> GLuint -> m ()
ffiuintIOV FunPtr (GLuint -> IO ())
glValidateProgramPipelineEXTFunPtr

glValidateProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glValidateProgramPipelineEXTFunPtr :: FunPtr (GLuint -> IO ())
glValidateProgramPipelineEXTFunPtr = IO (FunPtr (GLuint -> IO ())) -> FunPtr (GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLuint -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glValidateProgramPipelineEXT")

{-# NOINLINE glValidateProgramPipelineEXTFunPtr #-}

pattern $bGL_ACTIVE_PROGRAM_EXT :: a
$mGL_ACTIVE_PROGRAM_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_ACTIVE_PROGRAM_EXT = 0x8B8D

pattern $bGL_ALL_SHADER_BITS_EXT :: a
$mGL_ALL_SHADER_BITS_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_ALL_SHADER_BITS_EXT = 0xFFFFFFFF

pattern $bGL_FRAGMENT_SHADER_BIT_EXT :: a
$mGL_FRAGMENT_SHADER_BIT_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_FRAGMENT_SHADER_BIT_EXT = 0x00000002

pattern $bGL_PROGRAM_PIPELINE_BINDING_EXT :: a
$mGL_PROGRAM_PIPELINE_BINDING_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_PROGRAM_PIPELINE_BINDING_EXT = 0x825A

pattern $bGL_PROGRAM_SEPARABLE_EXT :: a
$mGL_PROGRAM_SEPARABLE_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_PROGRAM_SEPARABLE_EXT = 0x8258

pattern $bGL_VERTEX_SHADER_BIT_EXT :: a
$mGL_VERTEX_SHADER_BIT_EXT :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_VERTEX_SHADER_BIT_EXT = 0x00000001