0

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

4

1 回答 1

3

您需要首先将索引列表编组为Ptr's,然后将这些Ptr's 编组为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

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

于 2011-07-13T12:30:42.397 回答