-- This file was automatically generated.
{-# LANGUAGE CPP, ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Ext.NV.OcclusionQuery (
  -- * Extension Support
    gl_NV_occlusion_query

  -- * GL_NV_occlusion_query
  , glBeginOcclusionQueryNV
  , glDeleteOcclusionQueriesNV
  , glEndOcclusionQueryNV
  , glGenOcclusionQueriesNV
  , glGetOcclusionQueryivNV
  , glGetOcclusionQueryuivNV
  , glIsOcclusionQueryNV
  , pattern GL_CURRENT_OCCLUSION_QUERY_ID_NV
  , pattern GL_PIXEL_COUNTER_BITS_NV
  , pattern GL_PIXEL_COUNT_AVAILABLE_NV
  , pattern GL_PIXEL_COUNT_NV
) 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.Types
import System.IO.Unsafe

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

gl_NV_occlusion_query :: Bool
gl_NV_occlusion_query :: Bool
gl_NV_occlusion_query = String -> Set String -> Bool
forall a. Ord a => a -> Set a -> Bool
member String
"GL_NV_occlusion_query" Set String
extensions
{-# NOINLINE gl_NV_occlusion_query #-}

-- | Usage: @'glBeginOcclusionQueryNV' id@


glBeginOcclusionQueryNV :: MonadIO m => GLuint -> m ()
glBeginOcclusionQueryNV :: forall (m :: * -> *). MonadIO m => GLuint -> m ()
glBeginOcclusionQueryNV = FunPtr (GLuint -> IO ()) -> GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> IO ()) -> GLuint -> m ()
ffiuintIOV FunPtr (GLuint -> IO ())
glBeginOcclusionQueryNVFunPtr

glBeginOcclusionQueryNVFunPtr :: FunPtr (GLuint -> IO ())
glBeginOcclusionQueryNVFunPtr :: FunPtr (GLuint -> IO ())
glBeginOcclusionQueryNVFunPtr = IO (FunPtr (GLuint -> IO ())) -> FunPtr (GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLuint -> IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glBeginOcclusionQueryNV")

{-# NOINLINE glBeginOcclusionQueryNVFunPtr #-}

-- | Usage: @'glDeleteOcclusionQueriesNV' n ids@
--
-- The length of @ids@ should be @n@.


glDeleteOcclusionQueriesNV :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteOcclusionQueriesNV :: forall (m :: * -> *). MonadIO m => GLsizei -> Ptr GLuint -> m ()
glDeleteOcclusionQueriesNV = 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 ())
glDeleteOcclusionQueriesNVFunPtr

glDeleteOcclusionQueriesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteOcclusionQueriesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glDeleteOcclusionQueriesNVFunPtr = IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
-> FunPtr (GLsizei -> Ptr GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glDeleteOcclusionQueriesNV")

{-# NOINLINE glDeleteOcclusionQueriesNVFunPtr #-}

-- | Usage: @'glEndOcclusionQueryNV'@


glEndOcclusionQueryNV :: MonadIO m => m ()
glEndOcclusionQueryNV :: forall (m :: * -> *). MonadIO m => m ()
glEndOcclusionQueryNV = FunPtr (IO ()) -> m ()
forall (m :: * -> *). MonadIO m => FunPtr (IO ()) -> m ()
ffiIOV FunPtr (IO ())
glEndOcclusionQueryNVFunPtr

glEndOcclusionQueryNVFunPtr :: FunPtr (IO ())
glEndOcclusionQueryNVFunPtr :: FunPtr (IO ())
glEndOcclusionQueryNVFunPtr = IO (FunPtr (IO ())) -> FunPtr (IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glEndOcclusionQueryNV")

{-# NOINLINE glEndOcclusionQueryNVFunPtr #-}

-- | Usage: @'glGenOcclusionQueriesNV' n ids@
--
-- The length of @ids@ should be @n@.


glGenOcclusionQueriesNV :: MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenOcclusionQueriesNV :: forall (m :: * -> *). MonadIO m => GLsizei -> Ptr GLuint -> m ()
glGenOcclusionQueriesNV = 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 ())
glGenOcclusionQueriesNVFunPtr

glGenOcclusionQueriesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenOcclusionQueriesNVFunPtr :: FunPtr (GLsizei -> Ptr GLuint -> IO ())
glGenOcclusionQueriesNVFunPtr = IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
-> FunPtr (GLsizei -> Ptr GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLsizei -> Ptr GLuint -> IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glGenOcclusionQueriesNV")

{-# NOINLINE glGenOcclusionQueriesNVFunPtr #-}

-- | Usage: @'glGetOcclusionQueryivNV' id pname params@
--
-- The parameter @pname@ is a @OcclusionQueryParameterNameNV@.
--
-- The length of @params@ should be @COMPSIZE(pname)@.


glGetOcclusionQueryivNV :: MonadIO m => GLuint -> GLenum -> Ptr GLint -> m ()
glGetOcclusionQueryivNV :: forall (m :: * -> *).
MonadIO m =>
GLuint -> GLuint -> Ptr GLsizei -> m ()
glGetOcclusionQueryivNV = 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 ())
glGetOcclusionQueryivNVFunPtr

glGetOcclusionQueryivNVFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLint -> IO ())
glGetOcclusionQueryivNVFunPtr :: FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
glGetOcclusionQueryivNVFunPtr = IO (FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ()))
-> FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLuint -> GLuint -> Ptr GLsizei -> IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glGetOcclusionQueryivNV")

{-# NOINLINE glGetOcclusionQueryivNVFunPtr #-}

-- | Usage: @'glGetOcclusionQueryuivNV' id pname params@
--
-- The parameter @pname@ is a @OcclusionQueryParameterNameNV@.
--
-- The length of @params@ should be @COMPSIZE(pname)@.


glGetOcclusionQueryuivNV :: MonadIO m => GLuint -> GLenum -> Ptr GLuint -> m ()
glGetOcclusionQueryuivNV :: forall (m :: * -> *).
MonadIO m =>
GLuint -> GLuint -> Ptr GLuint -> m ()
glGetOcclusionQueryuivNV = FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ())
-> GLuint -> GLuint -> Ptr GLuint -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ())
-> GLuint -> GLuint -> Ptr GLuint -> m ()
ffiuintenumPtruintIOV FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ())
glGetOcclusionQueryuivNVFunPtr

glGetOcclusionQueryuivNVFunPtr :: FunPtr (GLuint -> GLenum -> Ptr GLuint -> IO ())
glGetOcclusionQueryuivNVFunPtr :: FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ())
glGetOcclusionQueryuivNVFunPtr = IO (FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ()))
-> FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ())
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLuint -> GLuint -> Ptr GLuint -> IO ()))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glGetOcclusionQueryuivNV")

{-# NOINLINE glGetOcclusionQueryuivNVFunPtr #-}

-- | Usage: @'glIsOcclusionQueryNV' id@


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

glIsOcclusionQueryNVFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsOcclusionQueryNVFunPtr :: FunPtr (GLuint -> IO GLboolean)
glIsOcclusionQueryNVFunPtr = IO (FunPtr (GLuint -> IO GLboolean))
-> FunPtr (GLuint -> IO GLboolean)
forall a. IO a -> a
unsafePerformIO (String -> IO (FunPtr (GLuint -> IO GLboolean))
forall a. String -> IO (FunPtr a)
getProcAddress String
"glIsOcclusionQueryNV")

{-# NOINLINE glIsOcclusionQueryNVFunPtr #-}

pattern GL_CURRENT_OCCLUSION_QUERY_ID_NV  :: (Eq a, Num a) => a

pattern $mGL_CURRENT_OCCLUSION_QUERY_ID_NV :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bGL_CURRENT_OCCLUSION_QUERY_ID_NV :: forall a. (Eq a, Num a) => a
GL_CURRENT_OCCLUSION_QUERY_ID_NV = 0x8865

pattern GL_PIXEL_COUNTER_BITS_NV  :: (Eq a, Num a) => a

pattern $mGL_PIXEL_COUNTER_BITS_NV :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bGL_PIXEL_COUNTER_BITS_NV :: forall a. (Eq a, Num a) => a
GL_PIXEL_COUNTER_BITS_NV = 0x8864

pattern GL_PIXEL_COUNT_AVAILABLE_NV  :: (Eq a, Num a) => a

pattern $mGL_PIXEL_COUNT_AVAILABLE_NV :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bGL_PIXEL_COUNT_AVAILABLE_NV :: forall a. (Eq a, Num a) => a
GL_PIXEL_COUNT_AVAILABLE_NV = 0x8867

pattern GL_PIXEL_COUNT_NV  :: (Eq a, Num a) => a

pattern $mGL_PIXEL_COUNT_NV :: forall {r} {a}.
(Eq a, Num a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
$bGL_PIXEL_COUNT_NV :: forall a. (Eq a, Num a) => a
GL_PIXEL_COUNT_NV = 0x8866