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

Why are there two brackets [ in the c++ vertex functions?

我正在观看 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]])

还有什么是 1 或 2 周的有趣项目作为 GP-GPU 的介绍?对于一个数学很好但没有艺术技能的新手来说是可以应付的。

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

之间传递的 att

我引用:

The [[ … ]] syntax is used to declare attributes such as resource locations, shader inputs, and built-in variables that are passed back and forth between shaders and CPU

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

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

Metal 着色语言定义了许多属性,允许您将各种语义与变量、struct/class 成员和函数参数(包括参数 table 绑定,如您的问题)。

Metal Shading Language Specification在这方面遵照C++标准,所以C++标准确实是参考参考:

The Metal programming language is based on the C++14 Specification (a.k.a., the ISO/IEC JTC1/SC22/ WG21 N4431 Language Specification) with specific extensions and restrictions. Please refer to the C++14 Specification for a detailed description of the language grammar.