如何使用glGenTextures

时间:2011-07-19 11:22:02

标签: opengl haskell

在C中我会做以下事情:

GLuint a;
glGenTextures(1, &a);

Haskell中glGenTextures的类型是:

GLsizei -> Ptr GLuint -> IO ()

如何获取Ptr GLuint类型的值?

2 个答案:

答案 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可以为您创建缓冲区而无需初始化它。