-- This file was automatically generated.
{-# LANGUAGE CPP, ScopedTypeVariables, PatternSynonyms #-}
module Graphics.GL.Ext.SGIX.PolynomialFfd (
  -- * Extension Support
    gl_SGIX_polynomial_ffd

  -- * GL_SGIX_polynomial_ffd
  , glDeformSGIX
  , glDeformationMap3dSGIX
  , glDeformationMap3fSGIX
  , glLoadIdentityDeformationMapSGIX
  , pattern GL_DEFORMATIONS_MASK_SGIX
  , pattern GL_GEOMETRY_DEFORMATION_BIT_SGIX
  , pattern GL_GEOMETRY_DEFORMATION_SGIX
  , pattern GL_MAX_DEFORMATION_ORDER_SGIX
  , pattern GL_TEXTURE_DEFORMATION_BIT_SGIX
  , pattern GL_TEXTURE_DEFORMATION_SGIX
) 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 GL_SGIX_polynomial_ffd extension is available.

gl_SGIX_polynomial_ffd :: Bool
gl_SGIX_polynomial_ffd = member "GL_SGIX_polynomial_ffd" extensions
{-# NOINLINE gl_SGIX_polynomial_ffd #-}

-- | Usage: @'glDeformSGIX' mask@
--
-- The parameter @mask@ is a @FfdMaskSGIX@, one of: .


glDeformSGIX :: MonadIO m => GLbitfield -> m ()
glDeformSGIX = ffibitfieldIOV glDeformSGIXFunPtr

glDeformSGIXFunPtr :: FunPtr (GLbitfield -> IO ())
glDeformSGIXFunPtr = unsafePerformIO (getProcAddress "glDeformSGIX")

{-# NOINLINE glDeformSGIXFunPtr #-}

-- | Usage: @'glDeformationMap3dSGIX' target u1 u2 ustride uorder v1 v2 vstride vorder w1 w2 wstride worder points@
--
-- The parameter @target@ is a @FfdTargetSGIX@, one of: 'Graphics.GL.Ext.SGIX.PolynomialFfd.GL_GEOMETRY_DEFORMATION_SGIX', 'Graphics.GL.Ext.SGIX.PolynomialFfd.GL_TEXTURE_DEFORMATION_SGIX'.
--
-- The parameter @u1@ is a @CoordD@.
--
-- The parameter @u2@ is a @CoordD@.
--
-- The parameter @uorder@ is a @CheckedInt32@.
--
-- The parameter @v1@ is a @CoordD@.
--
-- The parameter @v2@ is a @CoordD@.
--
-- The parameter @vorder@ is a @CheckedInt32@.
--
-- The parameter @w1@ is a @CoordD@.
--
-- The parameter @w2@ is a @CoordD@.
--
-- The parameter @worder@ is a @CheckedInt32@.
--
-- The parameter @points@ is a @CoordD@.
--
-- The length of @points@ should be @COMPSIZE(target,ustride,uorder,vstride,vorder,wstride,worder)@.


glDeformationMap3dSGIX :: MonadIO m => GLenum -> GLdouble -> GLdouble -> GLint -> GLint -> GLdouble -> GLdouble -> GLint -> GLint -> GLdouble -> GLdouble -> GLint -> GLint -> Ptr GLdouble -> m ()
glDeformationMap3dSGIX = ffienumdoubledoubleintintdoubledoubleintintdoubledoubleintintPtrdoubleIOV glDeformationMap3dSGIXFunPtr

glDeformationMap3dSGIXFunPtr :: FunPtr (GLenum -> GLdouble -> GLdouble -> GLint -> GLint -> GLdouble -> GLdouble -> GLint -> GLint -> GLdouble -> GLdouble -> GLint -> GLint -> Ptr GLdouble -> IO ())
glDeformationMap3dSGIXFunPtr = unsafePerformIO (getProcAddress "glDeformationMap3dSGIX")

{-# NOINLINE glDeformationMap3dSGIXFunPtr #-}

-- | Usage: @'glDeformationMap3fSGIX' target u1 u2 ustride uorder v1 v2 vstride vorder w1 w2 wstride worder points@
--
-- The parameter @target@ is a @FfdTargetSGIX@, one of: 'Graphics.GL.Ext.SGIX.PolynomialFfd.GL_GEOMETRY_DEFORMATION_SGIX', 'Graphics.GL.Ext.SGIX.PolynomialFfd.GL_TEXTURE_DEFORMATION_SGIX'.
--
-- The parameter @u1@ is a @CoordF@.
--
-- The parameter @u2@ is a @CoordF@.
--
-- The parameter @uorder@ is a @CheckedInt32@.
--
-- The parameter @v1@ is a @CoordF@.
--
-- The parameter @v2@ is a @CoordF@.
--
-- The parameter @vorder@ is a @CheckedInt32@.
--
-- The parameter @w1@ is a @CoordF@.
--
-- The parameter @w2@ is a @CoordF@.
--
-- The parameter @worder@ is a @CheckedInt32@.
--
-- The parameter @points@ is a @CoordF@.
--
-- The length of @points@ should be @COMPSIZE(target,ustride,uorder,vstride,vorder,wstride,worder)@.


glDeformationMap3fSGIX :: MonadIO m => GLenum -> GLfloat -> GLfloat -> GLint -> GLint -> GLfloat -> GLfloat -> GLint -> GLint -> GLfloat -> GLfloat -> GLint -> GLint -> Ptr GLfloat -> m ()
glDeformationMap3fSGIX = ffienumfloatfloatintintfloatfloatintintfloatfloatintintPtrfloatIOV glDeformationMap3fSGIXFunPtr

glDeformationMap3fSGIXFunPtr :: FunPtr (GLenum -> GLfloat -> GLfloat -> GLint -> GLint -> GLfloat -> GLfloat -> GLint -> GLint -> GLfloat -> GLfloat -> GLint -> GLint -> Ptr GLfloat -> IO ())
glDeformationMap3fSGIXFunPtr = unsafePerformIO (getProcAddress "glDeformationMap3fSGIX")

{-# NOINLINE glDeformationMap3fSGIXFunPtr #-}

-- | Usage: @'glLoadIdentityDeformationMapSGIX' mask@
--
-- The parameter @mask@ is a @FfdMaskSGIX@, one of: .


glLoadIdentityDeformationMapSGIX :: MonadIO m => GLbitfield -> m ()
glLoadIdentityDeformationMapSGIX = ffibitfieldIOV glLoadIdentityDeformationMapSGIXFunPtr

glLoadIdentityDeformationMapSGIXFunPtr :: FunPtr (GLbitfield -> IO ())
glLoadIdentityDeformationMapSGIXFunPtr = unsafePerformIO (getProcAddress "glLoadIdentityDeformationMapSGIX")

{-# NOINLINE glLoadIdentityDeformationMapSGIXFunPtr #-}

pattern GL_DEFORMATIONS_MASK_SGIX = 0x8196

pattern GL_GEOMETRY_DEFORMATION_BIT_SGIX = 0x00000002

pattern GL_GEOMETRY_DEFORMATION_SGIX = 0x8194

pattern GL_MAX_DEFORMATION_ORDER_SGIX = 0x8197

pattern GL_TEXTURE_DEFORMATION_BIT_SGIX = 0x00000001

pattern GL_TEXTURE_DEFORMATION_SGIX = 0x8195