簡體   English   中英

如何將Haskell字符串轉換為Ptr(Ptr GLchar)?

[英]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

您可以使用withCStringForeign.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM