如何使用 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 提交?