我试图了解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变量转换为常量,则会在签名中显示下一个值的时间错误。似乎在这个项目中,某些东西被改变了,并且不接受任何其他类型的变量,但只有... ...
如果有人遇到类似的问题,或者知道如何解决这个问题,我就会陷入困境并需要一些帮助。