键值设置SCNProgram OpenGL着色器的自定义值

Gar*_*kin 5 opengl key-value-coding vertex-shader scenekit

根据Apple的文档"要更新一次值,使用键值编码:调用setValue:forKey:方法,提供着色器源代码中的统一名称作为键,并提供适当类型的数据作为值."(取自SCNProgram类参考).

但是,我不能让这个工作.

我有一个SCNMaterial子类,设置一个新的SCNProgram实例,加载顶点和片段着色器.我一直在handleBindingOfSymbol用来设置自定义变量,例如

self.stringMaterial.handleBindingOfSymbol("waveAmplitude") {
    programID, location, renderedNode, renderer in
    glUniform1f(GLint(location), Float(self.amplitude))
}
Run Code Online (Sandbox Code Playgroud)

这是正常的.

为了提高效率,我希望能够使用键值编码.但是,如果我用上面的代码替换

self.stringMaterial.setValue(Float(self.amplitude), forKey: "waveAmplitude")
Run Code Online (Sandbox Code Playgroud)

着色器中的统一值为0.0.

有人对这个有经验么?(我在MacOS上这样做,但我希望它在iOS上也一样.)