簡體   English   中英

如何調用 function glMultiDrawElements:: GLenum -> GHC.Ptr.Ptr GLsizei -> GHC.Ptr.Ptr (GHC.Ptr.Ptr a) -> GLsizei -> IO ()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM