我正在尝试了解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变量转换为常量,则会为签名中的下一个值显示此时间错误 . 似乎在这个项目中,某些东西被改变了,不接受任何其他类型的变量,但只有...

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