2012-07-28 99 views

回答

1

在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库为你做包装,这也带来了一些类型安全和一个接口,可能会更好一点。

相关问题