- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想调用函数
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/
我正在使用 Eclipse、MinGW,我已经编译了 freeglut 和 glew,并将它们的库、DLL 和头文件复制到适当的位置(MinGW/include/GL、MinGW/lib、Window
我有一个 C 函数,需要使用 const GLchar ** 参数调用。 我不是一名 C 程序员(Perl 是我的游戏),但我试图从 Perl 调用 C 库。我已经包装了所有其他必需的功能(SWIG)
我在将参数传递到我的函数 Void ShaderCode() 之一时遇到问题,更具体地说,我收到此错误: Error C2440: 'initializing' : cannot convert fr
我正在尝试在我的程序中使用基本着色器,我遇到了 a nice tutorial这会告诉你如何编写一个基本的着色器“util 类”,我想你会这样调用它?这应该允许我应用顶点和片段着色器...所以我将 g
我想调用函数 glShaderSource :: GLuint -> GLsizei -> GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar) -> GHC.Ptr.Ptr GL
我想调用函数 glShaderSource :: GLuint -> GLsizei -> GHC.Ptr.Ptr (GHC.Ptr.Ptr GLchar) -> GHC.Ptr.Ptr GL
我刚刚在我刚刚起步的应用程序的 GL 界面中发现了一个小问题。在桌面 GL 上,像 glShaderSource() 这样的东西采用 GLchar*,但在移动 GLES 界面上,它们采用普通的 cha
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我有一个存储在字符串值中的着色器: var myShader = " attribute vec4 a_position;" + " void main() {"
我想知道为什么当我取消注释行 GLChar* test = "Test"; 时我的代码无法编译 这是我的完整代码: #include // GLEW #define GLEW_STATIC #inc
我是一名优秀的程序员,十分优秀!