OpenGL Raw ライブラリには、次の関数があります。
glPolygonStipple :: Ptr GLubyte -> IO ()
この関数に対応する C は配列へのポインターを受け入れますが、Haskell プログラムで配列/リストを使用してこの関数を呼び出すにはどうすればよいでしょうか?
mallocArray を使用してメモリを割り当て、pokeArray を使用してリストを配置します。
何かのようなもの:
do
arrayOfGLuBytes <- (mallocArray 15) :: IO (Ptr GLubyte)
pokeArray arrayOfGLuBytes [1,2,3,4]
glPolygonStipple arrayOfGLuBytes
free arrayOfGLuBytes -- free from Foreign.Marshall.Alloc
この状況でおそらく最善の方法は、ベクターパッケージ[http://hackage.haskell.org/packages/archive/vector/0.7.1/doc/html/Data-Vector-Storable.html][1に格納可能なベクターです。 ]。パッケージは、不変ベクトルと可変ベクトルの両方に豊富なインターフェイスを提供するため、IOモナド内にベクトルを作成する必要はありません。リストに加えて、リンクリストと配列への変換はコピーされません
あなたの特定の例は次のようになります
let myVector = fromList [1,2,3,4]
in unsafeWith myVector glPolygonStipple