Swift 5 中的金属顶点着色器警告

Giz*_*odo 9 xcode vertex-shader ios swift metal

我从 Apple 的示例代码中获得了这个直通顶点着色器:

vertex VertexIO vertexPassThrough(device packed_float4 *pPosition  [[ buffer(0) ]],
                                  device packed_float2 *pTexCoords [[ buffer(1) ]],
                                  uint                  vid        [[ vertex_id ]])
{
    VertexIO outVertex;

    outVertex.position = pPosition[vid];
    outVertex.textureCoord = pTexCoords[vid];

    return outVertex;
}
Run Code Online (Sandbox Code Playgroud)

这适用于 Swift 4/Xcode 10/iOS 12。现在我使用 Swift 5/Xcode 11/iOS 13,我收到此警告:

writable resources in non-void vertex function
Run Code Online (Sandbox Code Playgroud)

tro*_*foe 16

您需要确保着色器只能从这些缓冲区读取,因此您需要将声明更改为const device

vertex VertexIO vertexPassThrough(const device packed_float4 *pPosition  [[ buffer(0) ]],
                                  const device packed_float2 *pTexCoords [[ buffer(1) ]],
                                  uint                  vid        [[ vertex_id ]])
{
...
}
Run Code Online (Sandbox Code Playgroud)