我正在阅读使用 Metal 启动并运行,第 2 部分,尝试学习使用可用的最佳语言功能重写所有代码。其中一个特性是 C++ 构造函数,我很高兴能够在我的着色器中使用它,它来自 Cg 和 GLSL,它们缺少这个。
此代码在设备上运行良好,但我收到警告:
'vertex_main' 指定了 C 链接,但返回与 C 不兼容的用户定义类型 'ColoredVertex'
这有关系吗?我不知道为什么要指定 C-linkage。我也不知道如何禁用警告,这是我想做的,以及报告错误,如果没关系的话。
using namespace metal;
struct ColoredVertex {
const float4 position [[position]];
const half4 color;
ColoredVertex(const float4 position, const half4 color)
: position(position), color(color) {}
};
vertex ColoredVertex vertex_main(
constant float4 *position [[buffer(0)]],
constant float4 *color [[buffer(1)]],
uint vid [[vertex_id]]
) {return ColoredVertex(position[vid], half4(color[vid]));}
fragment half4 fragment_main(ColoredVertex vert [[stage_in]]) {
return vert.color;
}