1

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

4

1 回答 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 回答