在Metal着色器中,我试图在顶点着色器函数的输出结构中使用[[clip_distance]]属性,如下所示:
struct vtx_out
{
float4 gl_Position [[position]];
float gl_ClipDistance[1] [[clip_distance]];
};
但是,这会导致以下着色器编译错误:
<program source>:86:32: error: 'clip_distance' attribute cannot be applied to types
float gl_ClipDistance[1] [[clip_distance]];
^
我正在尝试将其编译为在运行OS X El Capitan的Mac上运行。
为什么我会收到此错误,如何使用[[clip_distance]]属性?
答案 0 :(得分:1)
使用此:
struct vtx_out
{
float4 gl_Position [[position]];
float gl_ClipDistance [[clip_distance]] [1];
};
在金属着色语言clip_distance
中是声明属性。
C ++规范[dcl.array]
声明:
在声明T D中,D的格式为
D1 [constant-expressionopt] attribute-specifier-seqopt
...可选的attribute-specifier-seq附属于数组。
这就是为什么将属性放在最后使Clang将其视为类型属性并且您得到了您看到的错误。