什么是GLboolean值表示真和假?

时间:2012-07-28 12:40:39

标签: opengl haskell

我正在使用Haskell的OpenGL.Raw库,我希望将GLboolean值用于true和false,但它们似乎没有在库中预定义。我如何自己定义这些值?

1 个答案:

答案 0 :(得分:1)

OpenGL库中用于此的两个函数是(在内部模块GLBoolean中)

marshalGLboolean :: Num a => Bool -> a
marshalGLboolean x = fromIntegral $ case x of
   False -> gl_FALSE
   True -> gl_TRUE

unmarshalGLboolean :: (Eq a, Num a) => a -> Bool
unmarshalGLboolean = (/= fromIntegral gl_FALSE)

GLBoolean是Num类型类的实例,但您需要在使用OpenGL函数的每个位置转换正常的Bool值。如果您不想在每个地方进行转换,那么您可以使用以下

gTrue, gFalse :: Num a => a
gTrue = fromIntegral gl_TRUE
gFalse = fromIntegral gl_FALSE

但缺点是您不能使用&&||等常规布尔运算。 或者你可以让OpenGL库为你做包装,这也带来了一些类型安全和可能更好的界面。