我一定是错过了某些简单的东西……希望如此。
我在使用 Xcode 7 和 iOS 9 SDK 时遇到了问题,无法使自定义着色器工作。从精灵工具模板开始,我更改了 GameScene 以使其看起来像这样:
class GameScene: SKScene {
var backgroundShader = SKShader(fileNamed: "BackgroundShader")
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder) is not used in this app")
}
override init(size: CGSize) {
super.init(size: size)
anchorPoint = CGPoint(x: 0.5, y: 0.5)
let background = SKSpriteNode(color: SKColor.brownColor(), size: size)
background.shader = backgroundShader
addChild(background)
}
}
我的 "BackgroundShader" 如下所示:
void main()
{
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0)
}
所以,我希望我的背景应该是绿色的,但实际上它是棕色的。我还尝试为SKSpriteNode使用纹理,但这并没有帮助。
我几乎可以确定这在iOS 8中有效,但我也没有发现其他人抱怨自定义着色器不起作用,所以我有点迷失了。
另一个注意点是,控制台上没有关于着色器的打印信息。例如,如果我故意在片段着色器中创建一个错误,我期望控制台会输出日志消息,但实际上没有。这就像自定义着色器被忽略了一样。当然,在设置值时已经验证了着色器对象是否存在;因此它正在读取着色器文件,但似乎从未编译它。