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

时间:2011-07-13 09:09:44

标签: c opengl haskell ffi

函数glMultiDrawElements需要指向指针的指针作为其参数之一。如何从Storable Array Int Ptr(Ptr a)获得a

1 个答案:

答案 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来获取原始指针。