2011-07-13 7 views
0

関数glMultiDrawElementsが必要ですその引数の1つとしてのポインタへのポインタどのようにしてをStorableArray Int aから得ることができますか?あなたが最初にあなたがここでは、この関数を呼び出す方法glMultiDrawElements :: GLenum - > GHC.Ptr.Ptr GLsizei - > GLenum - > GHC.Ptr.Ptr(GHC.Ptr.Ptr a) - > GLsizei - > IO()

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のリストを行うことができますPtr (Ptr Int))

にS「のそれらのPtrをマーシャリングそして、S」のPtrにインデックスのあなたのリストをマーシャリングする必要が

答えて

3

まだ範囲内にあるので、各ポインタを解放するためにmapMを渡すことができます。後でメモリを解放する場合は、リストを保持するか、ixPtrPtrを保持して、peekArrayを使用して元のポインタを戻します。

+0

これは私が必要としているようです。ありがとう! – Eric

+0

@エリック:私の答えがあなたの問題を解決した場合、それを「受け入れ」とマークしてください。私たちの両方に役立ちます。 –

関連する問題