module Graphics.Rendering.OpenGL.GL.QueryUtils (
module Graphics.Rendering.OpenGL.GL.QueryUtils.PName,
module Graphics.Rendering.OpenGL.GL.QueryUtils.VertexAttrib,
lightIndexToEnum,
modelviewIndexToEnum, modelviewEnumToIndex,
maybeNullPtr
) where
import Foreign.Ptr
import Graphics.Rendering.OpenGL.GL.QueryUtils.PName
import Graphics.Rendering.OpenGL.GL.QueryUtils.VertexAttrib
import Graphics.Rendering.OpenGL.Raw
lightIndexToEnum :: GLsizei -> Maybe GLenum
lightIndexToEnum i
| 0 <= i && i <= maxLightIndex = Just (gl_LIGHT0 + fromIntegral i)
| otherwise = Nothing
maxLightIndex :: GLsizei
maxLightIndex = 0xFFF
modelviewIndexToEnum :: GLsizei -> Maybe GLenum
modelviewIndexToEnum 0 = Just gl_MODELVIEW
modelviewIndexToEnum 1 = Just gl_MODELVIEW1
modelviewIndexToEnum i
| 2 <= i && i <= 31 = Just (gl_MODELVIEW2 2 + fromIntegral i)
| otherwise = Nothing
modelviewEnumToIndex :: GLenum -> Maybe GLsizei
modelviewEnumToIndex x
| x == gl_MODELVIEW = Just 0
| x == gl_MODELVIEW1 = Just 1
| gl_MODELVIEW2 <= x && x <= gl_MODELVIEW31 = Just (fromIntegral (x (gl_MODELVIEW2 2)))
| otherwise = Nothing
maybeNullPtr :: b -> (Ptr a -> b) -> Ptr a -> b
maybeNullPtr n f ptr | ptr == nullPtr = n
| otherwise = f ptr