如何使用 glGenTextures

Posted

技术标签:

【中文标题】如何使用 glGenTextures【英文标题】:How to use glGenTextures 【发布时间】:2011-07-19 11:22:01 【问题描述】:

在 C 中我会做以下事情:

GLuint a;
glGenTextures(1, &a);

Haskell 中glGenTextures 的类型是:

GLsizei -> Ptr GLuint -> IO ()

如何获得Ptr GLuint 类型的值?

【问题讨论】:

【参考方案1】:

首先,我想指出Haskell OpenGL 绑定有一个high-level incarnation 和doesn't require the user to do manual memory management。

一般来说,对于任何Storable 类型a,您可以使用mallocArray 获得足以容纳所述类型的n 元素的内存块。 mallocArray 的结果类型为 Ptr a;就像在 C 中一样,您应该在之后使用free 来释放分配的内存空间。您也可以使用allocaArray 临时分配内存(相当于C 中的堆栈分配)。以下是OpenGL 库uses allocaArray in conjunction with glGenTextures 的方式:

   genObjectNames n =
      allocaArray n $ \buf -> do
        glGenTextures (fromIntegral n) buf
        fmap (map TextureObject) $ peekArray n buf

您可以找到有关这些主题的更多信息in the Haskell Wiki。

【讨论】:

【参考方案2】:

我认为准确的翻译是:

GLuint a;
glGenTextures(1, &a);

是:

import Foreign.Marshal.Utils( with )

with a $ \dir_a -> glGenTextures 1 dir_a

如果您需要传递一个数组,您可以使用withArray 获取一个列表,并使用该列表保留和初始化一个缓冲区。 allocaArray 也可以为你创建缓冲区而不用初始化它。

【讨论】:

以上是关于如何使用 glGenTextures的主要内容,如果未能解决你的问题,请参考以下文章

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?

如何使用laravel保存所有行数据每个行名或相等

如何使用 Math.Net 连接矩阵。如何使用 Math.Net 调用特定的行或列?

WSARecv 如何使用 lpOverlapped?如何手动发出事件信号?