gpt4 book ai didi

opengl - 如何将 Haskell 字符串转换为 Ptr (Ptr GLchar)?

转载 作者:行者123 更新时间:2023-12-02 22:34:10 25 4
gpt4 key购买 nike

我想调用函数

glShaderSource ::
GLuint
-> GLsizei
-> GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar)
-> GHC.Ptr.Ptr GLint
-> IO ()

第三个参数是着色器程序,在我的程序中是一个Haskell字符串。如何将 Haskell String 转换为 GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar) 以便调用 glShaderSource

最佳答案

您可以使用 Foreign.C.String 中的 withCString 将 Haskell C 字符串转换为临时 C 字符串。字符串在调用开始时分配并在结束时释放。

withCString s $ \c_string -> let gl_string = castPtr c_string :: Ptr GLchar
in glShaderSource a b (foo gl_string) d

转换是必要的,因为字符串编码函数使用 CChar 类型,而 GL 使用 GLchar 类型。它们都是 8 位有符号整数,我认为 OpenGL 库和 FFI 将来都不会更改其字符类型。如果您担心指针转换,您可以编写自己的编码(marshal)处理函数。

关于指针到指针类型:

您现在有一个 Ptr GLchar。制作 Ptr (Ptr GLchar) 的正确方法取决于 OpenGL 库的期望。例如,它需要一个指针数组吗?它会在某些指针上调用 free 吗?它会写入其中的一些字符串吗?该解决方案可能会涉及一些内存分配和指针复制。

关于opengl - 如何将 Haskell 字符串转换为 Ptr (Ptr GLchar)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11726563/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com