0

ffunctionglMultiDrawElementsには、引数の 1 つとしてポインターへのポインターが必要です。Ptr(Ptr a)StorableArray Int から を取得するにはどうすればよいでしょaうか?

4

1 に答える 1

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

ここで s のリストPtrはまだスコープ内にあるため、その上に mapM をマップして各ポインターを解放できます。後でメモリを解放したい場合は、リストを保持するか、ixPtrPtr を保持しpeekArrayて元のポインタを取得するために使用できます。

于 2011-07-13T12:30:42.397 に答える