我正在使用 Haskell 的 OpenGL.Raw 库,我希望将 GLboolean 值用于 true 和 false,但它们似乎没有在库中预定义。我如何自己定义这些价值观?
问问题
2018 次
1 回答
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 类型类的一个实例,但是您需要Bool
在使用 OpenGL 函数的每个地方转换正常值。如果您不想在每个地方都转换它,那么您可以使用以下
gTrue, gFalse :: Num a => a
gTrue = fromIntegral gl_TRUE
gFalse = fromIntegral gl_FALSE
但缺点是你不能使用像&&
和这样的普通布尔运算||
。或者你可以让 OpenGL 库为你做包装,这也带来了一些类型安全和一个可能更好一点的接口。
于 2012-07-28T13:19:30.277 回答