Objective c 非法向量组件名称“;x";(金属)

Objective c 非法向量组件名称“;x";(金属),objective-c,xcode,macos,metal,metalkit,Objective C,Xcode,Macos,Metal,Metalkit,对于Metal,在运行时,当我尝试编译着色器时,我会收到错误 错误:向量组件名称“x”非法 它在macos 10.14/10.15中运行良好,但在旧MacMini上的macos 10.11上却崩溃了

对于Metal,在运行时,当我尝试编译着色器时,我会收到错误

错误:向量组件名称“x”非法

它在macos 10.14/10.15中运行良好,但在旧MacMini上的macos 10.11上却崩溃了
using namespace metal;

struct Vertex {
  packed_float3 position;
};

struct ProjectedVertex {
  float4 position [[position]];
};

vertex ProjectedVertex vertexShader(constant Vertex *vertexArray [[buffer(0)]],
                                    const unsigned int vertexId [[vertex_id]],
                                    constant float4x4 &MVPMatrix [[buffer(1)]]) {
  Vertex in = vertexArray[vertexId];
  ProjectedVertex out;
  out.position = float4(in.position.x, in.position.y, in.position.z, 1) * MVPMatrix;
  return out;
}

在Metal 2.1之前,在Metal着色语言中不允许访问压缩向量类型的命名组件

要解决此问题,请通过订阅或创建相应非压缩类型的局部变量来访问这些元素:

out.position = float4(in.position[0], in.position[1], in.position[2], 1) * MVPMatrix;

// OR:

float3 position = in.position;
out.position = float4(position.x, position.y, position.z, 1) * MVPMatrix;

请提供您的着色器代码。@0xBFE1A8我刚刚更新了问题:)谢谢!但你是怎么知道的?上面写着no where:(@loki 2.2.3压缩向量Types@warrenm我如何处理position.xy这样的指令?有没有类似于in.position[x]的解决方案可以帮助我而不必执行float3 position=in.position;?我不知道。