为什么有两个括号[在c ++顶点函数中?

时间:2016-12-04 20:02:04

标签: c++ shader metal metalkit

我正在观看Apple关于Metal和MetalKit的介绍视频。

着色器的示例代码具有[[buffer(0)]]个参数的双括号。为什么有两个括号?它是否意味着什么,或者只是表明存在关键字" buffer"以下?标准c ++中没有这样的构造,是吗?

vertex Vertex vertex_func(constant Vertex *vertices [[buffer(0)]],
                              constant Uniforms &uniforms [[buffer(1)]],
                              uint vid [[vertex_id]])

作为GP-GPU的介绍,这也是一个好的1周或2周的有趣项目?对于具有良好数学技能但没有艺术技能的新手来说,这是可以管理的。

2 个答案:

答案 0 :(得分:7)

这些被称为属性,它们的语法和行为在C ++标准的第7.6.1节中定义,属性语法和语义。它们在语法中看起来像这样:

attribute-specifier:
    [ [ attribute-list ] ]
    alignment-specifier

Metal shading语言定义了许多属性,允许您将各种语义与变量struct / class成员和函数参数(包括您的问题中的参数表绑定)相关联。

Metal Shading Language Specification遵循C ++标准,所以C ++标准确实是参考咨询:

  

Metal编程语言基于C ++ 14规范   (a.k.a.,ISO / IEC JTC1 / SC22 / WG21 N4431语言规范)   具有特定的扩展和限制。请参阅C ++ 14   规范语言语法的详细描述。

答案 1 :(得分:3)

使用此[[x]]声明在着色器和CPU

之间传递的att

我引用:

  

[[...]]语法用于声明资源等属性   位置,着色器输入和传回的内置变量   着色器和CPU之间的