Вам необходимо сначала упорядочить свои списки индексов в 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
s все еще находится в области видимости, поэтому мы можем отобразить поверх него M, чтобы освободить каждый указатель.Если вы хотите освободить память позже, вы можете сохранить список или оставить ixPtrPtr и использовать peekArray
, чтобы вернуть исходные указатели.