iOS 9的Sprite Kit自定义着色器似乎被忽略了。

3

我一定是错过了某些简单的东西……希望如此。

我在使用 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中有效,但我也没有发现其他人抱怨自定义着色器不起作用,所以我有点迷失了。
另一个注意点是,控制台上没有关于着色器的打印信息。例如,如果我故意在片段着色器中创建一个错误,我期望控制台会输出日志消息,但实际上没有。这就像自定义着色器被忽略了一样。当然,在设置值时已经验证了着色器对象是否存在;因此它正在读取着色器文件,但似乎从未编译它。
1个回答

0
我找出了我的问题...要获取与OpenGL相关的调试信息,必须在实际设备上运行。在模拟器中,我根本没有得到任何信息。但是,只要我在设备上运行,它就开始喷出大量数据,有助于跟踪问题。
那么上面的代码有什么问题呢?着色器中我忘记加一个“;”。 我要归咎于swift ;)
顺便说一下,当着色器正确时,它也能在模拟器中工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接