4

OpenGL Raw ライブラリには、次の関数があります。

glPolygonStipple :: Ptr GLubyte -> IO ()

この関数に対応する C は配列へのポインターを受け入れますが、Haskell プログラムで配列/リストを使用してこの関数を呼び出すにはどうすればよいでしょうか?

4

2 に答える 2

5

mallocArray を使用してメモリを割り当て、pokeArray を使用してリストを配置します。

http://hackage.haskell.org/packages/archive/base/latest/doc/html/Foreign-Marshal-Array.html#v:mallocArray

何かのようなもの:

do
  arrayOfGLuBytes <- (mallocArray 15) :: IO (Ptr GLubyte)
  pokeArray arrayOfGLuBytes [1,2,3,4]
  glPolygonStipple arrayOfGLuBytes
  free arrayOfGLuBytes -- free from Foreign.Marshall.Alloc
于 2011-07-07T20:53:32.180 に答える
0

この状況でおそらく最善の方法は、ベクターパッケージ[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
于 2011-07-07T21:16:51.283 に答える