使用Metal着色器中的[[clip_distance]]属性?

时间:2016-12-17 20:29:37

标签: metal

在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]]属性?

1 个答案:

答案 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将其视为类型属性并且您得到了您看到的错误。