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

  -- * GL_NV_vdpau_interop
  , glVDPAUFiniNV
  , glVDPAUGetSurfaceivNV
  , glVDPAUInitNV
  , glVDPAUIsSurfaceNV
  , glVDPAUMapSurfacesNV
  , glVDPAURegisterOutputSurfaceNV
  , glVDPAURegisterVideoSurfaceNV
  , glVDPAUSurfaceAccessNV
  , glVDPAUUnmapSurfacesNV
  , glVDPAUUnregisterSurfaceNV
  , pattern GL_SURFACE_MAPPED_NV
  , pattern GL_SURFACE_REGISTERED_NV
  , pattern GL_SURFACE_STATE_NV
  , pattern GL_WRITE_DISCARD_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/vdpau_interop.txt GL_NV_vdpau_interop> extension is available.

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

-- | Usage: @'glVDPAUFiniNV'@


glVDPAUFiniNV :: MonadIO m => m ()
glVDPAUFiniNV :: m ()
glVDPAUFiniNV = FunPtr (IO ()) -> m ()
forall (m :: * -> *). MonadIO m => FunPtr (IO ()) -> m ()
ffiIOV FunPtr (IO ())
glVDPAUFiniNVFunPtr

glVDPAUFiniNVFunPtr :: FunPtr (IO ())
glVDPAUFiniNVFunPtr :: FunPtr (IO ())
glVDPAUFiniNVFunPtr = IO (FunPtr (IO ())) -> FunPtr (IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUFiniNV")

{-# NOINLINE glVDPAUFiniNVFunPtr #-}

-- | Usage: @'glVDPAUGetSurfaceivNV' surface pname bufSize length values@
--
-- The parameter @surface@ is a @vdpauSurfaceNV@.
--
-- The length of @values@ should be @bufSize@.


glVDPAUGetSurfaceivNV :: MonadIO m => GLvdpauSurfaceNV -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLint -> m ()
glVDPAUGetSurfaceivNV :: GLvdpauSurfaceNV
-> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> m ()
glVDPAUGetSurfaceivNV = FunPtr
  (GLvdpauSurfaceNV
   -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ())
-> GLvdpauSurfaceNV
-> GLenum
-> GLsizei
-> Ptr GLsizei
-> Ptr GLsizei
-> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (GLvdpauSurfaceNV
   -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ())
-> GLvdpauSurfaceNV
-> GLenum
-> GLsizei
-> Ptr GLsizei
-> Ptr GLsizei
-> m ()
ffivdpauSurfaceNVenumsizeiPtrsizeiPtrintIOV FunPtr
  (GLvdpauSurfaceNV
   -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ())
glVDPAUGetSurfaceivNVFunPtr

glVDPAUGetSurfaceivNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLint -> IO ())
glVDPAUGetSurfaceivNVFunPtr :: FunPtr
  (GLvdpauSurfaceNV
   -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ())
glVDPAUGetSurfaceivNVFunPtr = IO
  (FunPtr
     (GLvdpauSurfaceNV
      -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ()))
-> FunPtr
     (GLvdpauSurfaceNV
      -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (GLvdpauSurfaceNV
         -> GLenum -> GLsizei -> Ptr GLsizei -> Ptr GLsizei -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUGetSurfaceivNV")

{-# NOINLINE glVDPAUGetSurfaceivNVFunPtr #-}

-- | Usage: @'glVDPAUInitNV' vdpDevice getProcAddress@


glVDPAUInitNV :: MonadIO m => Ptr () -> Ptr () -> m ()
glVDPAUInitNV :: Ptr () -> Ptr () -> m ()
glVDPAUInitNV = FunPtr (Ptr () -> Ptr () -> IO ()) -> Ptr () -> Ptr () -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (Ptr () -> Ptr () -> IO ()) -> Ptr () -> Ptr () -> m ()
ffiPtrVPtrVIOV FunPtr (Ptr () -> Ptr () -> IO ())
glVDPAUInitNVFunPtr

glVDPAUInitNVFunPtr :: FunPtr (Ptr () -> Ptr () -> IO ())
glVDPAUInitNVFunPtr :: FunPtr (Ptr () -> Ptr () -> IO ())
glVDPAUInitNVFunPtr = IO (FunPtr (Ptr () -> Ptr () -> IO ()))
-> FunPtr (Ptr () -> Ptr () -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (Ptr () -> Ptr () -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUInitNV")

{-# NOINLINE glVDPAUInitNVFunPtr #-}

-- | Usage: @'glVDPAUIsSurfaceNV' surface@
--
-- The parameter @surface@ is a @vdpauSurfaceNV@.


glVDPAUIsSurfaceNV :: MonadIO m => GLvdpauSurfaceNV -> m GLboolean
glVDPAUIsSurfaceNV :: GLvdpauSurfaceNV -> m GLboolean
glVDPAUIsSurfaceNV = FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
-> GLvdpauSurfaceNV -> m GLboolean
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
-> GLvdpauSurfaceNV -> m GLboolean
ffivdpauSurfaceNVIOboolean FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
glVDPAUIsSurfaceNVFunPtr

glVDPAUIsSurfaceNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
glVDPAUIsSurfaceNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
glVDPAUIsSurfaceNVFunPtr = IO (FunPtr (GLvdpauSurfaceNV -> IO GLboolean))
-> FunPtr (GLvdpauSurfaceNV -> IO GLboolean)
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLvdpauSurfaceNV -> IO GLboolean))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUIsSurfaceNV")

{-# NOINLINE glVDPAUIsSurfaceNVFunPtr #-}

-- | Usage: @'glVDPAUMapSurfacesNV' numSurfaces surfaces@
--
-- The parameter @surfaces@ is a @vdpauSurfaceNV@.
--
-- The length of @surfaces@ should be @numSurfaces@.


glVDPAUMapSurfacesNV :: MonadIO m => GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
glVDPAUMapSurfacesNV :: GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
glVDPAUMapSurfacesNV = FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
-> GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
-> GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
ffisizeiPtrvdpauSurfaceNVIOV FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUMapSurfacesNVFunPtr

glVDPAUMapSurfacesNVFunPtr :: FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUMapSurfacesNVFunPtr :: FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUMapSurfacesNVFunPtr = IO (FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ()))
-> FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUMapSurfacesNV")

{-# NOINLINE glVDPAUMapSurfacesNVFunPtr #-}

-- | Usage: @'glVDPAURegisterOutputSurfaceNV' vdpSurface target numTextureNames textureNames@
--
-- The length of @textureNames@ should be @numTextureNames@.


glVDPAURegisterOutputSurfaceNV :: MonadIO m => Ptr () -> GLenum -> GLsizei -> Ptr GLuint -> m GLvdpauSurfaceNV
glVDPAURegisterOutputSurfaceNV :: Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
glVDPAURegisterOutputSurfaceNV = FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
-> Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
-> Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
ffiPtrVenumsizeiPtruintIOvdpauSurfaceNV FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
glVDPAURegisterOutputSurfaceNVFunPtr

glVDPAURegisterOutputSurfaceNVFunPtr :: FunPtr (Ptr () -> GLenum -> GLsizei -> Ptr GLuint -> IO GLvdpauSurfaceNV)
glVDPAURegisterOutputSurfaceNVFunPtr :: FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
glVDPAURegisterOutputSurfaceNVFunPtr = IO
  (FunPtr
     (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV))
-> FunPtr
     (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAURegisterOutputSurfaceNV")

{-# NOINLINE glVDPAURegisterOutputSurfaceNVFunPtr #-}

-- | Usage: @'glVDPAURegisterVideoSurfaceNV' vdpSurface target numTextureNames textureNames@
--
-- The length of @textureNames@ should be @numTextureNames@.


glVDPAURegisterVideoSurfaceNV :: MonadIO m => Ptr () -> GLenum -> GLsizei -> Ptr GLuint -> m GLvdpauSurfaceNV
glVDPAURegisterVideoSurfaceNV :: Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
glVDPAURegisterVideoSurfaceNV = FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
-> Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
forall (m :: * -> *).
MonadIO m =>
FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
-> Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> m GLvdpauSurfaceNV
ffiPtrVenumsizeiPtruintIOvdpauSurfaceNV FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
glVDPAURegisterVideoSurfaceNVFunPtr

glVDPAURegisterVideoSurfaceNVFunPtr :: FunPtr (Ptr () -> GLenum -> GLsizei -> Ptr GLuint -> IO GLvdpauSurfaceNV)
glVDPAURegisterVideoSurfaceNVFunPtr :: FunPtr
  (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
glVDPAURegisterVideoSurfaceNVFunPtr = IO
  (FunPtr
     (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV))
-> FunPtr
     (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV)
forall a. IO a -> a
unsafePerformIO ([Char]
-> IO
     (FunPtr
        (Ptr () -> GLenum -> GLsizei -> Ptr GLenum -> IO GLvdpauSurfaceNV))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAURegisterVideoSurfaceNV")

{-# NOINLINE glVDPAURegisterVideoSurfaceNVFunPtr #-}

-- | Usage: @'glVDPAUSurfaceAccessNV' surface access@
--
-- The parameter @surface@ is a @vdpauSurfaceNV@.


glVDPAUSurfaceAccessNV :: MonadIO m => GLvdpauSurfaceNV -> GLenum -> m ()
glVDPAUSurfaceAccessNV :: GLvdpauSurfaceNV -> GLenum -> m ()
glVDPAUSurfaceAccessNV = FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
-> GLvdpauSurfaceNV -> GLenum -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
-> GLvdpauSurfaceNV -> GLenum -> m ()
ffivdpauSurfaceNVenumIOV FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
glVDPAUSurfaceAccessNVFunPtr

glVDPAUSurfaceAccessNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
glVDPAUSurfaceAccessNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
glVDPAUSurfaceAccessNVFunPtr = IO (FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ()))
-> FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLvdpauSurfaceNV -> GLenum -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUSurfaceAccessNV")

{-# NOINLINE glVDPAUSurfaceAccessNVFunPtr #-}

-- | Usage: @'glVDPAUUnmapSurfacesNV' numSurface surfaces@
--
-- The parameter @surfaces@ is a @vdpauSurfaceNV@.
--
-- The length of @surfaces@ should be @numSurface@.


glVDPAUUnmapSurfacesNV :: MonadIO m => GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
glVDPAUUnmapSurfacesNV :: GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
glVDPAUUnmapSurfacesNV = FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
-> GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
-> GLsizei -> Ptr GLvdpauSurfaceNV -> m ()
ffisizeiPtrvdpauSurfaceNVIOV FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUUnmapSurfacesNVFunPtr

glVDPAUUnmapSurfacesNVFunPtr :: FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUUnmapSurfacesNVFunPtr :: FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
glVDPAUUnmapSurfacesNVFunPtr = IO (FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ()))
-> FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLsizei -> Ptr GLvdpauSurfaceNV -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUUnmapSurfacesNV")

{-# NOINLINE glVDPAUUnmapSurfacesNVFunPtr #-}

-- | Usage: @'glVDPAUUnregisterSurfaceNV' surface@
--
-- The parameter @surface@ is a @vdpauSurfaceNV@.


glVDPAUUnregisterSurfaceNV :: MonadIO m => GLvdpauSurfaceNV -> m ()
glVDPAUUnregisterSurfaceNV :: GLvdpauSurfaceNV -> m ()
glVDPAUUnregisterSurfaceNV = FunPtr (GLvdpauSurfaceNV -> IO ()) -> GLvdpauSurfaceNV -> m ()
forall (m :: * -> *).
MonadIO m =>
FunPtr (GLvdpauSurfaceNV -> IO ()) -> GLvdpauSurfaceNV -> m ()
ffivdpauSurfaceNVIOV FunPtr (GLvdpauSurfaceNV -> IO ())
glVDPAUUnregisterSurfaceNVFunPtr

glVDPAUUnregisterSurfaceNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> IO ())
glVDPAUUnregisterSurfaceNVFunPtr :: FunPtr (GLvdpauSurfaceNV -> IO ())
glVDPAUUnregisterSurfaceNVFunPtr = IO (FunPtr (GLvdpauSurfaceNV -> IO ()))
-> FunPtr (GLvdpauSurfaceNV -> IO ())
forall a. IO a -> a
unsafePerformIO ([Char] -> IO (FunPtr (GLvdpauSurfaceNV -> IO ()))
forall a. [Char] -> IO (FunPtr a)
getProcAddress "glVDPAUUnregisterSurfaceNV")

{-# NOINLINE glVDPAUUnregisterSurfaceNVFunPtr #-}

pattern $bGL_SURFACE_MAPPED_NV :: a
$mGL_SURFACE_MAPPED_NV :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_SURFACE_MAPPED_NV = 0x8700

pattern $bGL_SURFACE_REGISTERED_NV :: a
$mGL_SURFACE_REGISTERED_NV :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_SURFACE_REGISTERED_NV = 0x86FD

pattern $bGL_SURFACE_STATE_NV :: a
$mGL_SURFACE_STATE_NV :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_SURFACE_STATE_NV = 0x86EB

pattern $bGL_WRITE_DISCARD_NV :: a
$mGL_WRITE_DISCARD_NV :: forall r a. (Eq a, Num a) => a -> (Void# -> r) -> (Void# -> r) -> r
GL_WRITE_DISCARD_NV = 0x88BE