module Graphics.OpenGLES.State (
lineWidth, polygonOffset, scissor,
sampleCoverage,
begin, end,
Capability,
culling,
blend,
dither,
stencilTest,
depthTest,
scissorTest,
polygonOffsetFill,
sampleAlphaToCoverage,
multisampleCoverage,
primitiveRestartFixedIndex,
rasterizerDiscard,
cullFace, frontFace,
CullFace, hideFront, hideBack, hidePolygons,
stencilFunc, stencilFuncSeparate,
stencilOp, stencilOpSeparate,
StencilOp, opZero, opKeep, opReplace, opIncr,
opDecr, opInvert, opIncrWrap, opDecrWrap,
depthFunc,
CompFunc, glNever, glLess, glEqual, glLessEq,
glGreater, glNotEq, glGreatEq, glAlways,
blendEquation, blendEquationSeparate,
blendFunc, blendFuncSeparate,
Clampf, blendColor,
BlendOp, addBlending, subBlending, reverseSubBlending,
BlendingFactor, factorZero, factorOne, srcColor, oneMinusSrcColor,
srcAlpha, oneMinusSrcAlpha, dstAlpha, oneMinusDstAlpha,
dstColor, oneMinusDstColor, srcAlphaSaturate,
constColor, oneMinusConstColor, constAlpha, oneMinusConstAlpha,
generateMipmapHint, fragmentShaderDerivativeHint,
Hint, dontCare, nicest, fastest
) where
import Data.Int
import Data.Word
import Graphics.OpenGLES.Base
import Graphics.OpenGLES.Internal
type Clampf = Float
begin :: Capability -> GL ()
begin (Capability cap) = glEnable cap
end :: Capability -> GL ()
end (Capability cap) = glDisable cap
culling = Capability 0x0B44
blend = Capability 0x0BE2
dither = Capability 0x0BD0
stencilTest = Capability 0x0B90
depthTest = Capability 0x0B71
scissorTest = Capability 0x0C11
polygonOffsetFill = Capability 0x8037
sampleAlphaToCoverage = Capability 0x809E
multisampleCoverage = Capability 0x80A0
primitiveRestartFixedIndex = Capability 0x8D69
rasterizerDiscard = Capability 0x8C89
lineWidth :: Float -> GL ()
lineWidth = glLineWidth
frontFace :: Bool -> GL ()
frontFace cw = glFrontFace (if cw then 0x900 else 0x901)
cullFace :: CullFace -> GL ()
cullFace (Culling x) = glCullFace x
hideFront = Culling 0x0404
hideBack = Culling 0x0405
hidePolygons = Culling 0x408
polygonOffset
:: Float
-> Float
-> GL ()
polygonOffset factor units = glPolygonOffset factor units
scissor
:: Int32
-> Int32
-> Int32
-> Int32
-> GL ()
scissor l b w h = glScissor l b w h
sampleCoverage
:: Float
-> Bool
-> GL ()
sampleCoverage value invert =
glSampleCoverage value (if invert then 1 else 0)
stencilFunc :: CompFunc -> Int32 -> Word32 -> GL ()
stencilFunc (CompFunc func) comp mask =
glStencilFunc func comp mask
stencilFuncSeparate :: CullFace -> CompFunc -> Int32 -> Word32 -> GL ()
stencilFuncSeparate (Culling cull) (CompFunc func) comp mask =
glStencilFuncSeparate cull func comp mask
stencilOp :: StencilOp -> StencilOp -> StencilOp -> GL ()
stencilOp (StencilOp sfail) (StencilOp dpfail) (StencilOp dppass) =
glStencilOp sfail dpfail dppass
stencilOpSeparate :: CullFace -> StencilOp -> StencilOp -> StencilOp -> GL ()
stencilOpSeparate (Culling cull) (StencilOp sfail)
(StencilOp dpfail) (StencilOp dppass) =
glStencilOpSeparate cull sfail dpfail dppass
depthFunc :: CompFunc -> GL ()
depthFunc (CompFunc func) = glDepthFunc func
glNever = CompFunc 0x0200
glLess = CompFunc 0x0201
glEqual = CompFunc 0x0202
glLessEq = CompFunc 0x0203
glGreater = CompFunc 0x0204
glNotEq = CompFunc 0x0205
glGreatEq = CompFunc 0x0206
glAlways = CompFunc 0x0207
opZero = StencilOp 0x0000
opKeep = StencilOp 0x1E00
opReplace = StencilOp 0x1E01
opIncr = StencilOp 0x1E02
opDecr = StencilOp 0x1E03
opInvert = StencilOp 0x150A
opIncrWrap = StencilOp 0x8507
opDecrWrap = StencilOp 0x8508
blendEquation :: BlendOp -> GL ()
blendEquation (BlendOp mode) = glBlendEquation mode
blendEquationSeparate :: BlendOp -> BlendOp -> GL ()
blendEquationSeparate (BlendOp rgb) (BlendOp a) =
glBlendEquationSeparate rgb a
addBlending = BlendOp 0x8006
subBlending = BlendOp 0x800A
reverseSubBlending = BlendOp 0x800B
blendFunc :: BlendingFactor -> BlendingFactor -> GL ()
blendFunc (BlendingFactor src) (BlendingFactor dest) =
glBlendFunc src dest
blendFuncSeparate :: BlendingFactor -> BlendingFactor -> BlendingFactor -> BlendingFactor -> GL ()
blendFuncSeparate (BlendingFactor srgb) (BlendingFactor drgb)
(BlendingFactor salpha) (BlendingFactor dalpha) =
glBlendFuncSeparate srgb drgb salpha dalpha
factorZero = BlendingFactor 0
factorOne = BlendingFactor 1
srcColor = BlendingFactor 0x300
oneMinusSrcColor = BlendingFactor 0x301
srcAlpha = BlendingFactor 0x302
oneMinusSrcAlpha = BlendingFactor 0x303
dstAlpha = BlendingFactor 0x304
oneMinusDstAlpha = BlendingFactor 0x305
dstColor = BlendingFactor 0x306
oneMinusDstColor = BlendingFactor 0x307
srcAlphaSaturate = BlendingFactor 0x308
constColor = BlendingFactor 0x8001
oneMinusConstColor = BlendingFactor 0x8002
constAlpha = BlendingFactor 0x8003
oneMinusConstAlpha = BlendingFactor 0x8004
blendColor :: Clampf -> Clampf -> Clampf -> Clampf -> GL ()
blendColor r g b a = glBlendColor r g b a
generateMipmapHint :: Hint -> GL ()
generateMipmapHint (Hint hint) = glHint 0x8192 hint
fragmentShaderDerivativeHint :: Hint -> GL ()
fragmentShaderDerivativeHint (Hint hint) = glHint 0x8B8B hint
dontCare = Hint 0x1100
fastest = Hint 0x1101
nicest = Hint 0x1102