1
我使用Haskell的OpenGL.Raw库,我想使用GLboolean值真假,但他们似乎并不在图书馆预定义。我如何自己定义这些值?什么是表示真假的GL布尔值?
我使用Haskell的OpenGL.Raw库,我想使用GLboolean值真假,但他们似乎并不在图书馆预定义。我如何自己定义这些值?什么是表示真假的GL布尔值?
在OpenGL库用于此的两个功能是
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
是民类型类的一个实例(内部模块GLBoolean中),但你需要正常Bool
值在每一个地方转换你使用OpenGL函数。如果你不希望它在每一个地方转换,那么你可以使用下面的
gTrue, gFalse :: Num a => a
gTrue = fromIntegral gl_TRUE
gFalse = fromIntegral gl_FALSE
但缺点是,你不能用正常的布尔运算像&&
和||
。 或者你可以让OpenGL库为你做包装,这也带来了一些类型安全和一个接口,可能会更好一点。