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 monad 中创建向量。除了列表是链表和转换为数组 inovlve 复制

您的特定示例可能看起来像

let myVector = fromList [1,2,3,4] 
in unsafeWith myVector glPolygonStipple
于 2011-07-07T21:16:51.283 回答