{-# OPTIONS_HADDOCK hide #-}
module Graphics.Rendering.OpenGL.GL.Capability (
Capability(..), marshalCapability, unmarshalCapability,
EnableCap(..), makeCapability, makeStateVarMaybe,
IndexedEnableCap(..), makeIndexedCapability,
) where
import Data.StateVar
import Graphics.Rendering.OpenGL.GL.GLboolean
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
import Graphics.GL
data Capability =
Disabled
| Enabled
deriving ( Capability -> Capability -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Capability -> Capability -> Bool
$c/= :: Capability -> Capability -> Bool
== :: Capability -> Capability -> Bool
$c== :: Capability -> Capability -> Bool
Eq, Eq Capability
Capability -> Capability -> Bool
Capability -> Capability -> Ordering
Capability -> Capability -> Capability
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: Capability -> Capability -> Capability
$cmin :: Capability -> Capability -> Capability
max :: Capability -> Capability -> Capability
$cmax :: Capability -> Capability -> Capability
>= :: Capability -> Capability -> Bool
$c>= :: Capability -> Capability -> Bool
> :: Capability -> Capability -> Bool
$c> :: Capability -> Capability -> Bool
<= :: Capability -> Capability -> Bool
$c<= :: Capability -> Capability -> Bool
< :: Capability -> Capability -> Bool
$c< :: Capability -> Capability -> Bool
compare :: Capability -> Capability -> Ordering
$ccompare :: Capability -> Capability -> Ordering
Ord, Int -> Capability -> ShowS
[Capability] -> ShowS
Capability -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Capability] -> ShowS
$cshowList :: [Capability] -> ShowS
show :: Capability -> String
$cshow :: Capability -> String
showsPrec :: Int -> Capability -> ShowS
$cshowsPrec :: Int -> Capability -> ShowS
Show )
marshalCapability :: Capability -> GLboolean
marshalCapability :: Capability -> GLboolean
marshalCapability = forall a. Num a => Bool -> a
marshalGLboolean forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Capability
Enabled forall a. Eq a => a -> a -> Bool
==)
unmarshalCapability :: GLboolean -> Capability
unmarshalCapability :: GLboolean -> Capability
unmarshalCapability GLboolean
x = if forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLboolean
x then Capability
Enabled else Capability
Disabled
data EnableCap =
CapFog
| CapLighting
| CapTexture1D
| CapTexture2D
| CapTexture2DMultisample
| CapTexture1DArray
| CapTextureRectangle
| CapTextureCubeMap
| CapTexture3D
| CapTexture2DArray
| CapTexture2DMultisampleArray
| CapTextureCubeMapArray
| CapLineStipple
| CapPolygonStipple
| CapCullFace
| CapAlphaTest
| CapBlend
| CapIndexLogicOp
| CapColorLogicOp
| CapDither
| CapStencilTest
| CapDepthTest
| CapClipPlane GLsizei
| CapLight GLsizei
| CapTextureGenS
| CapTextureGenT
| CapTextureGenR
| CapTextureGenQ
| CapMap1Vertex3
| CapMap1Vertex4
| CapMap1Color4
| CapMap1Index
| CapMap1Normal
| CapMap1TextureCoord1
| CapMap1TextureCoord2
| CapMap1TextureCoord3
| CapMap1TextureCoord4
| CapMap2Vertex3
| CapMap2Vertex4
| CapMap2Color4
| CapMap2Index
| CapMap2Normal
| CapMap2TextureCoord1
| CapMap2TextureCoord2
| CapMap2TextureCoord3
| CapMap2TextureCoord4
| CapPointSmooth
| CapLineSmooth
| CapPolygonSmooth
| CapScissorTest
| CapColorMaterial
| CapNormalize
| CapAutoNormal
| CapPolygonOffsetPoint
| CapPolygonOffsetLine
| CapPolygonOffsetFill
| CapVertexArray
| CapNormalArray
| CapColorArray
| CapIndexArray
| CapTextureCoordArray
| CapEdgeFlagArray
| CapFogCoordArray
| CapSecondaryColorArray
| CapMatrixIndexArray
| CapConvolution1D
| CapConvolution2D
| CapSeparable2D
| CapHistogram
| CapMinmax
| CapRescaleNormal
| CapSharedTexturePalette
| CapMultisample
| CapSampleAlphaToCoverage
| CapSampleAlphaToOne
| CapSampleCoverage
| CapColorTable
| CapPostConvolutionColorTable
| CapPostColorMatrixColorTable
| CapColorSum
| CapWeightSumUnity
| CapVertexBlend
| CapWeightArray
| CapMatrixPalette
| CapDepthClamp
| CapDepthBoundsTest
| CapPrimitiveRestart
| CapPointSprite
| CapStencilTestTwoSide
| CapRasterPositionUnclipped
| CapRasterizerDiscard
| CapTextureColorTable
| CapVertexProgramPointSize
| CapVertexProgramTwoSide
| CapDebugOutput
| CapDebugOutputSynchronous
marshalEnableCap :: EnableCap -> Maybe GLenum
marshalEnableCap :: EnableCap -> Maybe GLenum
marshalEnableCap EnableCap
x = case EnableCap
x of
EnableCap
CapFog -> forall a. a -> Maybe a
Just GLenum
GL_FOG
EnableCap
CapLighting -> forall a. a -> Maybe a
Just GLenum
GL_LIGHTING
EnableCap
CapTexture1D -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_1D
EnableCap
CapTexture2D -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_2D
EnableCap
CapTexture2DMultisample -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_2D_MULTISAMPLE
EnableCap
CapTexture1DArray -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_1D_ARRAY
EnableCap
CapTextureRectangle -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_RECTANGLE
EnableCap
CapTextureCubeMap -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_CUBE_MAP
EnableCap
CapTexture3D -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_3D
EnableCap
CapTexture2DArray -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_2D_ARRAY
EnableCap
CapTexture2DMultisampleArray -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_2D_MULTISAMPLE_ARRAY
EnableCap
CapTextureCubeMapArray -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_CUBE_MAP_ARRAY
EnableCap
CapLineStipple -> forall a. a -> Maybe a
Just GLenum
GL_LINE_STIPPLE
EnableCap
CapPolygonStipple -> forall a. a -> Maybe a
Just GLenum
GL_POLYGON_STIPPLE
EnableCap
CapCullFace -> forall a. a -> Maybe a
Just GLenum
GL_CULL_FACE
EnableCap
CapAlphaTest -> forall a. a -> Maybe a
Just GLenum
GL_ALPHA_TEST
EnableCap
CapBlend -> forall a. a -> Maybe a
Just GLenum
GL_BLEND
EnableCap
CapIndexLogicOp -> forall a. a -> Maybe a
Just GLenum
GL_INDEX_LOGIC_OP
EnableCap
CapColorLogicOp -> forall a. a -> Maybe a
Just GLenum
GL_COLOR_LOGIC_OP
EnableCap
CapDither -> forall a. a -> Maybe a
Just GLenum
GL_DITHER
EnableCap
CapStencilTest -> forall a. a -> Maybe a
Just GLenum
GL_STENCIL_TEST
EnableCap
CapDepthTest -> forall a. a -> Maybe a
Just GLenum
GL_DEPTH_TEST
CapClipPlane GLsizei
i -> GLsizei -> Maybe GLenum
clipPlaneIndexToEnum GLsizei
i
CapLight GLsizei
i -> GLsizei -> Maybe GLenum
lightIndexToEnum GLsizei
i
EnableCap
CapTextureGenS -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_GEN_S
EnableCap
CapTextureGenT -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_GEN_T
EnableCap
CapTextureGenR -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_GEN_R
EnableCap
CapTextureGenQ -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_GEN_Q
EnableCap
CapMap1Vertex3 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_VERTEX_3
EnableCap
CapMap1Vertex4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_VERTEX_4
EnableCap
CapMap1Color4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_COLOR_4
EnableCap
CapMap1Index -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_INDEX
EnableCap
CapMap1Normal -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_NORMAL
EnableCap
CapMap1TextureCoord1 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_TEXTURE_COORD_1
EnableCap
CapMap1TextureCoord2 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_TEXTURE_COORD_2
EnableCap
CapMap1TextureCoord3 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_TEXTURE_COORD_3
EnableCap
CapMap1TextureCoord4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP1_TEXTURE_COORD_4
EnableCap
CapMap2Vertex3 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_VERTEX_3
EnableCap
CapMap2Vertex4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_VERTEX_4
EnableCap
CapMap2Color4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_COLOR_4
EnableCap
CapMap2Index -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_INDEX
EnableCap
CapMap2Normal -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_NORMAL
EnableCap
CapMap2TextureCoord1 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_TEXTURE_COORD_1
EnableCap
CapMap2TextureCoord2 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_TEXTURE_COORD_2
EnableCap
CapMap2TextureCoord3 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_TEXTURE_COORD_3
EnableCap
CapMap2TextureCoord4 -> forall a. a -> Maybe a
Just GLenum
GL_MAP2_TEXTURE_COORD_4
EnableCap
CapPointSmooth -> forall a. a -> Maybe a
Just GLenum
GL_POINT_SMOOTH
EnableCap
CapLineSmooth -> forall a. a -> Maybe a
Just GLenum
GL_LINE_SMOOTH
EnableCap
CapPolygonSmooth -> forall a. a -> Maybe a
Just GLenum
GL_POLYGON_SMOOTH
EnableCap
CapScissorTest -> forall a. a -> Maybe a
Just GLenum
GL_SCISSOR_TEST
EnableCap
CapColorMaterial -> forall a. a -> Maybe a
Just GLenum
GL_COLOR_MATERIAL
EnableCap
CapNormalize -> forall a. a -> Maybe a
Just GLenum
GL_NORMALIZE
EnableCap
CapAutoNormal -> forall a. a -> Maybe a
Just GLenum
GL_AUTO_NORMAL
EnableCap
CapPolygonOffsetPoint -> forall a. a -> Maybe a
Just GLenum
GL_POLYGON_OFFSET_POINT
EnableCap
CapPolygonOffsetLine -> forall a. a -> Maybe a
Just GLenum
GL_POLYGON_OFFSET_LINE
EnableCap
CapPolygonOffsetFill -> forall a. a -> Maybe a
Just GLenum
GL_POLYGON_OFFSET_FILL
EnableCap
CapVertexArray -> forall a. a -> Maybe a
Just GLenum
GL_VERTEX_ARRAY
EnableCap
CapNormalArray -> forall a. a -> Maybe a
Just GLenum
GL_NORMAL_ARRAY
EnableCap
CapColorArray -> forall a. a -> Maybe a
Just GLenum
GL_COLOR_ARRAY
EnableCap
CapIndexArray -> forall a. a -> Maybe a
Just GLenum
GL_INDEX_ARRAY
EnableCap
CapTextureCoordArray -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COORD_ARRAY
EnableCap
CapEdgeFlagArray -> forall a. a -> Maybe a
Just GLenum
GL_EDGE_FLAG_ARRAY
EnableCap
CapFogCoordArray -> forall a. a -> Maybe a
Just GLenum
GL_FOG_COORD_ARRAY
EnableCap
CapSecondaryColorArray -> forall a. a -> Maybe a
Just GLenum
GL_SECONDARY_COLOR_ARRAY
EnableCap
CapMatrixIndexArray -> forall a. a -> Maybe a
Just GLenum
GL_MATRIX_INDEX_ARRAY_ARB
EnableCap
CapConvolution1D -> forall a. a -> Maybe a
Just GLenum
GL_CONVOLUTION_1D
EnableCap
CapConvolution2D -> forall a. a -> Maybe a
Just GLenum
GL_CONVOLUTION_2D
EnableCap
CapSeparable2D -> forall a. a -> Maybe a
Just GLenum
GL_SEPARABLE_2D
EnableCap
CapHistogram -> forall a. a -> Maybe a
Just GLenum
GL_HISTOGRAM
EnableCap
CapMinmax -> forall a. a -> Maybe a
Just GLenum
GL_MINMAX
EnableCap
CapRescaleNormal -> forall a. a -> Maybe a
Just GLenum
GL_RESCALE_NORMAL
EnableCap
CapSharedTexturePalette -> forall a. a -> Maybe a
Just GLenum
GL_SHARED_TEXTURE_PALETTE_EXT
EnableCap
CapMultisample -> forall a. a -> Maybe a
Just GLenum
GL_MULTISAMPLE
EnableCap
CapSampleAlphaToCoverage -> forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_ALPHA_TO_COVERAGE
EnableCap
CapSampleAlphaToOne -> forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_ALPHA_TO_ONE
EnableCap
CapSampleCoverage -> forall a. a -> Maybe a
Just GLenum
GL_SAMPLE_COVERAGE
EnableCap
CapColorTable -> forall a. a -> Maybe a
Just GLenum
GL_COLOR_TABLE
EnableCap
CapPostConvolutionColorTable -> forall a. a -> Maybe a
Just GLenum
GL_POST_CONVOLUTION_COLOR_TABLE
EnableCap
CapPostColorMatrixColorTable -> forall a. a -> Maybe a
Just GLenum
GL_POST_COLOR_MATRIX_COLOR_TABLE
EnableCap
CapColorSum -> forall a. a -> Maybe a
Just GLenum
GL_COLOR_SUM
EnableCap
CapWeightSumUnity -> forall a. a -> Maybe a
Just GLenum
GL_WEIGHT_SUM_UNITY_ARB
EnableCap
CapVertexBlend -> forall a. a -> Maybe a
Just GLenum
GL_VERTEX_BLEND_ARB
EnableCap
CapWeightArray -> forall a. a -> Maybe a
Just GLenum
GL_WEIGHT_ARRAY_ARB
EnableCap
CapMatrixPalette -> forall a. a -> Maybe a
Just GLenum
GL_MATRIX_PALETTE_ARB
EnableCap
CapDepthClamp -> forall a. a -> Maybe a
Just GLenum
GL_DEPTH_CLAMP
EnableCap
CapDepthBoundsTest -> forall a. a -> Maybe a
Just GLenum
GL_DEPTH_BOUNDS_TEST_EXT
EnableCap
CapPrimitiveRestart -> forall a. a -> Maybe a
Just GLenum
GL_PRIMITIVE_RESTART
EnableCap
CapPointSprite -> forall a. a -> Maybe a
Just GLenum
GL_POINT_SPRITE
EnableCap
CapStencilTestTwoSide -> forall a. a -> Maybe a
Just GLenum
GL_STENCIL_TEST_TWO_SIDE_EXT
EnableCap
CapRasterPositionUnclipped -> forall a. a -> Maybe a
Just GLenum
GL_RASTER_POSITION_UNCLIPPED_IBM
EnableCap
CapRasterizerDiscard -> forall a. a -> Maybe a
Just GLenum
GL_RASTERIZER_DISCARD
EnableCap
CapTextureColorTable -> forall a. a -> Maybe a
Just GLenum
GL_TEXTURE_COLOR_TABLE_SGI
EnableCap
CapVertexProgramPointSize -> forall a. a -> Maybe a
Just GLenum
GL_VERTEX_PROGRAM_POINT_SIZE
EnableCap
CapVertexProgramTwoSide -> forall a. a -> Maybe a
Just GLenum
GL_VERTEX_PROGRAM_TWO_SIDE
EnableCap
CapDebugOutput -> forall a. a -> Maybe a
Just GLenum
GL_DEBUG_OUTPUT
EnableCap
CapDebugOutputSynchronous -> forall a. a -> Maybe a
Just GLenum
GL_DEBUG_OUTPUT_SYNCHRONOUS
makeCapability :: EnableCap -> StateVar Capability
makeCapability :: EnableCap -> StateVar Capability
makeCapability EnableCap
cap = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (EnableCap -> IO Capability
isEnabled EnableCap
cap) (EnableCap -> Capability -> IO ()
enable EnableCap
cap)
isEnabled :: EnableCap -> IO Capability
isEnabled :: EnableCap -> IO Capability
isEnabled =
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (do IO ()
recordInvalidEnum; forall (m :: * -> *) a. Monad m => a -> m a
return Capability
Disabled)
(forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GLboolean -> Capability
unmarshalCapability forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (m :: * -> *). MonadIO m => GLenum -> m GLboolean
glIsEnabled) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
EnableCap -> Maybe GLenum
marshalEnableCap
enable :: EnableCap -> Capability -> IO ()
enable :: EnableCap -> Capability -> IO ()
enable EnableCap
cap Capability
state = forall b a. b -> (a -> b) -> Maybe a -> b
maybe IO ()
recordInvalidEnum (forall {m :: * -> *}. MonadIO m => Capability -> GLenum -> m ()
f Capability
state) (EnableCap -> Maybe GLenum
marshalEnableCap EnableCap
cap)
where f :: Capability -> GLenum -> m ()
f Capability
Disabled = forall (m :: * -> *). MonadIO m => GLenum -> m ()
glDisable
f Capability
Enabled = forall (m :: * -> *). MonadIO m => GLenum -> m ()
glEnable
makeStateVarMaybe :: IO EnableCap -> IO a -> (a -> IO ()) -> StateVar (Maybe a)
makeStateVarMaybe :: forall a.
IO EnableCap -> IO a -> (a -> IO ()) -> StateVar (Maybe a)
makeStateVarMaybe IO EnableCap
getCap IO a
getAct a -> IO ()
setAct =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(forall a. IO EnableCap -> IO a -> IO (Maybe a)
getStateVarMaybe IO EnableCap
getCap IO a
getAct)
(forall a. IO EnableCap -> (a -> IO ()) -> Maybe a -> IO ()
setStateVarMaybe IO EnableCap
getCap a -> IO ()
setAct)
getStateVarMaybe :: IO EnableCap -> IO a -> IO (Maybe a)
getStateVarMaybe :: forall a. IO EnableCap -> IO a -> IO (Maybe a)
getStateVarMaybe IO EnableCap
getCap IO a
act = do
StateVar Capability
capability <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap EnableCap -> StateVar Capability
makeCapability IO EnableCap
getCap
Capability
state <- forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get StateVar Capability
capability
if Capability
state forall a. Eq a => a -> a -> Bool
== Capability
Enabled
then forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall a. a -> Maybe a
Just IO a
act
else forall (m :: * -> *) a. Monad m => a -> m a
return forall a. Maybe a
Nothing
setStateVarMaybe :: IO EnableCap -> (a -> IO ()) -> Maybe a -> IO ()
setStateVarMaybe :: forall a. IO EnableCap -> (a -> IO ()) -> Maybe a -> IO ()
setStateVarMaybe IO EnableCap
getCap a -> IO ()
act Maybe a
val = do
StateVar Capability
capability <- forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap EnableCap -> StateVar Capability
makeCapability IO EnableCap
getCap
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (StateVar Capability
capability forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$= Capability
Disabled) (\a
x -> a -> IO ()
act a
x forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> StateVar Capability
capability forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$= Capability
Enabled) Maybe a
val
data IndexedEnableCap =
BlendI
marshalIndexedEnableCap :: IndexedEnableCap -> Maybe GLenum
marshalIndexedEnableCap :: IndexedEnableCap -> Maybe GLenum
marshalIndexedEnableCap IndexedEnableCap
x = case IndexedEnableCap
x of
IndexedEnableCap
BlendI -> forall a. a -> Maybe a
Just GLenum
GL_BLEND
makeIndexedCapability ::(a -> GLuint) -> IndexedEnableCap -> a
-> StateVar Capability
makeIndexedCapability :: forall a.
(a -> GLenum) -> IndexedEnableCap -> a -> StateVar Capability
makeIndexedCapability a -> GLenum
f IndexedEnableCap
cap a
val = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(GLenum -> IndexedEnableCap -> IO Capability
isIndexedEnabled (a -> GLenum
f a
val) IndexedEnableCap
cap)
(\Capability
state -> GLenum -> IndexedEnableCap -> Capability -> IO ()
enableIndexed (a -> GLenum
f a
val) IndexedEnableCap
cap Capability
state)
isIndexedEnabled :: GLuint -> IndexedEnableCap -> IO Capability
isIndexedEnabled :: GLenum -> IndexedEnableCap -> IO Capability
isIndexedEnabled GLenum
i =
forall b a. b -> (a -> b) -> Maybe a -> b
maybe (do IO ()
recordInvalidEnum; forall (m :: * -> *) a. Monad m => a -> m a
return Capability
Disabled)
(\GLenum
cap -> forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GLboolean -> Capability
unmarshalCapability forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m GLboolean
glIsEnabledi GLenum
cap GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
.
IndexedEnableCap -> Maybe GLenum
marshalIndexedEnableCap
enableIndexed :: GLuint -> IndexedEnableCap -> Capability -> IO ()
enableIndexed :: GLenum -> IndexedEnableCap -> Capability -> IO ()
enableIndexed GLenum
i IndexedEnableCap
cap Capability
state =
forall b a. b -> (a -> b) -> Maybe a -> b
maybe IO ()
recordInvalidEnum (forall {m :: * -> *}. MonadIO m => Capability -> GLenum -> m ()
f Capability
state) (IndexedEnableCap -> Maybe GLenum
marshalIndexedEnableCap IndexedEnableCap
cap)
where f :: Capability -> GLenum -> m ()
f Capability
Enabled = \GLenum
c -> forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glEnablei GLenum
c GLenum
i
f Capability
Disabled = \GLenum
c -> forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glDisablei GLenum
c GLenum
i