使用Metal,在运行时,当我尝试编译我的着色器时,我收到错误消息
错误:非法的向量组件名称'x'
在macOS 10.14 / 10.15中工作正常,但是在旧Mac mini上的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 Shading Language不允许访问打包矢量类型的命名组件。
要解决此问题,请通过下标或通过创建对应的非压缩类型的局部变量来访问此类元素:
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;