使用SpriteKit和Swift创建自定义着色器

时间:2014-07-03 18:16:10

标签: swift ios8 xcode6

对于我的游戏,我正在尝试实现一个创建缩放模糊效果的自定义着色器(我在使用着色器方面很新,所以如果我使用不正确的术语,请耐心等待)。我的项目中有.fsh着色器文件,我尝试使用SKShader应用它。

我用这个创建着色器:

let testShader = SKShader(fileNamed: "ZoomBlur.fsh");

我的着色器需要两个制服作为输入,blurCenter(vec2)和blurSize(float),所以我尝试将它们添加到我的着色器中:

testShader.addUniform(SKUniform(name: "blurSize", float: 50);

当尝试添加blurCenter时,似乎不是vec2的初始化器,只是浮动和纹理。看class reference,看起来我应该可以使用它:

testShader.addUniform(SKUniform(name: "blurCenter", floatVector2: ...);

...但是Xcode抛出了这个错误:

Incorrect argument label in call (have 'name:floatVector2:', expected 'name:float:')

如何添加vec2制服?我完全错过了什么吗?

1 个答案:

答案 0 :(得分:2)

GLKVector2是一种联合类型,Swift不会导入Beta 2中的任何类型。任何需要使用非导入类型的API本身都不会导入。 file a bug可能不是一个坏主意。

现在,您需要通过编写自己的C / ObjC函数/方法来解决这个问题,这些函数/方法转发到非导入的API,并通过桥接头从Swift调用它们。