[英]How can I convert a Haskell String into a Ptr (Ptr GLchar)?
我想調用該函數
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
?
您可以使用withCString
從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
CChar
是必需的,因為字符串封送處理函數使用CChar
類型,而GL使用GLchar
類型。 它們都是8位帶符號整數,我認為OpenGL庫和FFI將來都不會更改其字符類型。 如果您擔心指針轉換,可以編寫自己的封送處理功能。
在指針對指針類型上:
您現在有了一個Ptr GLchar
。 制作Ptr (Ptr GLchar)
的正確方法取決於OpenGL庫的期望。 例如,它期望指針數組嗎? 它在某些指針上調用free
嗎? 它會寫入某些字符串嗎? 該解決方案可能涉及一定數量的內存分配和指針復制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.