-- This file was automatically generated.
{-# LANGUAGE ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Raw.Extension.NV.Fence (
  -- * Extension Support
    gl_NV_fence

  -- * GL_NV_fence
  , glDeleteFencesNV
  , glFinishFenceNV
  , glGenFencesNV
  , glGetFenceivNV
  , glIsFenceNV
  , glSetFenceNV
  , glTestFenceNV
  , pattern GL_ALL_COMPLETED_NV
  , pattern GL_FENCE_CONDITION_NV
  , pattern GL_FENCE_STATUS_NV
) 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_NV_fence :: Bool
gl_NV_fence = member "GL_NV_fence" extensions

glDeleteFencesNV :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteFencesNV = ffisizeiPtruintIOV glDeleteFencesNVFunPtr

glDeleteFencesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteFencesNVFunPtr = unsafePerformIO (getProcAddress "glDeleteFencesNV")

{-# NOINLINE glDeleteFencesNVFunPtr #-}

glFinishFenceNV :: MonadIO m => GLuint -> m ()
glFinishFenceNV = ffiuintIOV glFinishFenceNVFunPtr

glFinishFenceNVFunPtr :: FunPtr (GLuint -> IO ())
glFinishFenceNVFunPtr = unsafePerformIO (getProcAddress "glFinishFenceNV")

{-# NOINLINE glFinishFenceNVFunPtr #-}

glGenFencesNV :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenFencesNV = ffisizeiPtruintIOV glGenFencesNVFunPtr

glGenFencesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenFencesNVFunPtr = unsafePerformIO (getProcAddress "glGenFencesNV")

{-# NOINLINE glGenFencesNVFunPtr #-}

glGetFenceivNV :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetFenceivNV = ffiuintenumPtrintIOV glGetFenceivNVFunPtr

glGetFenceivNVFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetFenceivNVFunPtr = unsafePerformIO (getProcAddress "glGetFenceivNV")

{-# NOINLINE glGetFenceivNVFunPtr #-}

glIsFenceNV :: MonadIO m => GLuint -> m GLboolean
glIsFenceNV = ffiuintIOboolean glIsFenceNVFunPtr

glIsFenceNVFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsFenceNVFunPtr = unsafePerformIO (getProcAddress "glIsFenceNV")

{-# NOINLINE glIsFenceNVFunPtr #-}

glSetFenceNV :: MonadIO m => GLuint -> GLenum -> m ()
glSetFenceNV = ffiuintenumIOV glSetFenceNVFunPtr

glSetFenceNVFunPtr :: FunPtr (GLuint -> GLenum -> IO ())
glSetFenceNVFunPtr = unsafePerformIO (getProcAddress "glSetFenceNV")

{-# NOINLINE glSetFenceNVFunPtr #-}

glTestFenceNV :: MonadIO m => GLuint -> m GLboolean
glTestFenceNV = ffiuintIOboolean glTestFenceNVFunPtr

glTestFenceNVFunPtr :: FunPtr (GLuint -> IO GLboolean)
glTestFenceNVFunPtr = unsafePerformIO (getProcAddress "glTestFenceNV")

{-# NOINLINE glTestFenceNVFunPtr #-}

pattern GL_ALL_COMPLETED_NV = 0x84F2 :: GLenum

pattern GL_FENCE_CONDITION_NV = 0x84F4 :: GLenum

pattern GL_FENCE_STATUS_NV = 0x84F3 :: GLenum