gpt4 book ai didi

c - 如何调用函数 glMultiDrawElements::GLenum -> GHC.Ptr.Ptr GLsizei -> GLenum -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO ()

转载 作者:太空宇宙 更新时间:2023-11-04 07:38:31 25 4
gpt4 key购买 nike

ffunction glMultiDrawElements 需要一个指向指针的指针作为其参数之一。如何从 StorableArray Int a 获取 Ptr(Ptr a)

最佳答案

您需要先将索引列表编码为 Ptr,然后将那些 Ptr 编码为 Ptr (Ptr Int))

你可以这样做

import Foreign.Marshal.Array

indices :: [[Int]]

do
ixPtrs <- mapM newArray indices
sizes <- newArray $ map (fromIntegral . length) indices
ixPtrPtr <- newArray ixPtrs
glMultiDrawElements enumType sizes iType ixPtrPtr (fromIntegral $ length indices)

mapM_ free ixPtrs
free ixPtrPtr
free sizes

这里 Ptr 的列表仍在范围内,因此我们可以对其进行 mapM 以释放每个指针。如果您想稍后释放内存,您可以保留列表或保留 ixPtrPtr 并使用 peekArray 取回原始指针。

关于c - 如何调用函数 glMultiDrawElements::GLenum -> GHC.Ptr.Ptr GLsizei -> GLenum -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO (),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com