我正在使用Haskell的OpenGL.Raw库,我希望将GLboolean值用于true和false,但它们似乎没有在库中预定义。我如何自己定义这些值?
答案 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库为你做包装,这也带来了一些类型安全和可能更好的界面。