[英]How to call the function glMultiDrawElements :: GLenum -> GHC.Ptr.Ptr GLsizei -> GLenum -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO ()
ffunction glMultiDrawElements
需要一個指向指針的指針作為它的 arguments 之一。 如何從 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
的列表仍然在 scope 中,因此我們可以對其進行 mapM 以釋放每個指針。 如果您想稍后釋放 memory,您可以保留列表或保留 ixPtrPtr 並使用peekArray
取回原始指針。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.