use*_*733 2 opengl haskell ffi
我想调用这个函数
glShaderSource ::
GLuint
-> GLsizei
-> GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar)
-> GHC.Ptr.Ptr GLint
-> IO ()
Run Code Online (Sandbox Code Playgroud)
第三个参数是着色器程序,它是我程序中的Haskell字符串.如何将Haskell String转换为GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar)可以调用的glShaderSource?
您可以使用withCStringfrom Foreign.C.String将Haskell C字符串转换为临时C字符串.字符串在调用开始时分配,并在结尾处释放.
withCString s $ \c_string -> let gl_string = castPtr c_string :: Ptr GLchar
in glShaderSource a b (foo gl_string) d
Run Code Online (Sandbox Code Playgroud)
强制转换是必要的,因为字符串编组函数使用CChar类型,而GL使用GLchar类型.它们都是8位有符号整数,我认为OpenGL库和FFI都不会在将来改变它的字符类型.如果您担心指针转换,您可以编写自己的编组功能.
在指针指针类型上:
你现在有了Ptr GLchar.制作a的正确方法Ptr (Ptr GLchar)取决于OpenGL库所期望的内容.例如,它是否期望一个指针数组?它是否需要free一些指针?它是否写入其中一些字符串?该解决方案可能涉及一些内存分配和指针复制.
| 归档时间: |
|
| 查看次数: |
658 次 |
| 最近记录: |