在C中我会做以下事情:
GLuint a;
glGenTextures(1, &a);
Haskell中glGenTextures
的类型是:
GLsizei -> Ptr GLuint -> IO ()
如何获取Ptr GLuint
类型的值?
答案 0 :(得分:3)
首先,我想指出Haskell OpenGL绑定具有high-level incarnation doesn't require the user to do manual memory management。
一般情况下,对于任何Storable
类型a
,您都可以获得一块足以容纳n
所述类型的Ptr a
元素的内存块。 mallocArray
的结果类型为OpenGL
;就像在C中一样,你应该使用mallocArray
来释放分配的内存空间。您还可以使用free
临时分配内存(相当于C中的堆栈分配)。以下是 genObjectNames n =
allocaArray n $ \buf -> do
glGenTextures (fromIntegral n) buf
fmap (map TextureObject) $ peekArray n buf
库allocaArray
:
{{1}}
您可以找到有关这些主题的更多信息uses allocaArray
in conjunction with glGenTextures
。
答案 1 :(得分:2)
我认为确切的翻译:
GLuint a;
glGenTextures(1, &a);
时:
import Foreign.Marshal.Utils( with )
with a $ \dir_a -> glGenTextures 1 dir_a
如果需要传递数组,可以使用获取列表的withArray
,并使用该列表保留并初始化缓冲区。此外,allocaArray
可以为您创建缓冲区而无需初始化它。