函数glMultiDrawElements
需要指向指针的指针作为其参数之一。如何从Storable Array Int Ptr(Ptr a)
获得a
?
答案 0 :(得分:3)
您需要先将您的索引列表封送到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
的列表仍然在范围内,因此我们可以在它上面映射以释放每个指针。如果您想稍后释放内存,可以保留列表或保留ixPtrPtr并使用peekArray
来获取原始指针。