如何在glShaderSource中将String作为GLchar**(char**)参数传递?

Den*_*hin 6 opengl swift

我有一个存储在String值中的着色器:

    var myShader = 
    "    attribute vec4 a_position;" +
    "    void main() {" +
    "    gl_Position = a_position;" +
    "    }"

    glShaderSource(shader, GLsizei(1), myShader, nil)
Run Code Online (Sandbox Code Playgroud)

函数glShaderSource具有绑定签名:

    func glShaderSource(shader: GLuint, count: GLsizei, string: UnsafePointer<UnsafePointer<GLchar>>, length: UnsafePointer<GLint>)
Run Code Online (Sandbox Code Playgroud)

当我尝试直接将着色器String传递给glShaderSource时,我收到错误消息:

    'String' is not convertible to 'UnsafePointer<UnsafePointer<GLchar>>'
Run Code Online (Sandbox Code Playgroud)

如何正确传递String?(xCode版本6.1(6A1052d))

Den*_*hin 8

经过半天的搜索,我找到了没有编译错误的工作解决方案,错误的内存访问失败了:

var cStringSource = (code as NSString).UTF8String
glShaderSource(shader, GLsizei(1), &cStringSource, nil)
Run Code Online (Sandbox Code Playgroud)


the*_*ild 5

斯威夫特3:

let shaderStringUTF8 = shaderString.cString(using: String.defaultCStringEncoding)
var shaderStringUTF8Pointer = UnsafePointer<GLchar>(shaderStringUTF8)

glShaderSource(shaderHandle, GLsizei(1), &shaderStringUTF8Pointer, nil)
Run Code Online (Sandbox Code Playgroud)

  • 第二行应修改为 var shaderStringUTF8Pointer = UnsafePointer&lt;GLchar&gt;(shaderStringUTF8) (2认同)