iOS Metal需要片段函数中的常量

时间:2017-02-27 12:56:19

标签: ios shader fragment-shader metal

我试图了解Apple的Metal并转换一些旧的opengl着色器。我遇到的错误只出现在一个项目而不是其他项目中。我想询问是否有编译器选项或类似的东西,我不知道并且可能导致此错误。

所以......我有一个音乐播放器的音频可视化器,我之前在Android的ndk上使用opengl写的。我在一个空项目中将着色器转换为金属。片段方法签名如下:

fragment float4 spectrum_fragment_func(
      Vertex vert [[stage_in]], 
      device Fragment *uniforms [[buffer(0)]], 
      device float *left [[buffer(1)]], 
      device float *right [[buffer(2)]]
)

我在代码中更新了Fragment对象。它有一个"时间"值和需要更新的效果,这意味着我不能使用常量值。

Shader在测试应用程序上编译和工作没有任何问题,只有一个ViewController和我的MTKView类。

当我将类和着色器按原样复制到另一个项目时,我开始收到此错误:

/Volumes/Additional/Projects/.../Visuals/Shaders.metal:31:189: 
Pointer argument to fragment function must be const

如果我将Fragment变量转换为常量,则会在签名中显示下一个值的时间错误。似乎在这个项目中,某些东西被改变了,并且不接受任何其他类型的变量,但只有... ...

如果有人遇到类似的问题,或者知道如何解决这个问题,我就会陷入困境并需要一些帮助。

0 个答案:

没有答案