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

use*_*972 6 c++ shader metal metalkit

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

着色器的示例代码具有这些双括号,如[[buffer(0)]]参数.为什么有两个括号?这是否意味着什么,或者只是表明关键字"缓冲区"跟随?标准c ++中没有这样的构造,有吗?

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

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

war*_*enm 7

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

attribute-specifier:
    [ [ attribute-list ] ]
    alignment-specifier
Run Code Online (Sandbox Code Playgroud)

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

金属着色语言规范推迟到C++这个标准,所以C++标准确实是咨询参考:

Metal编程语言基于C++ 14规范(又名,ISO/IEC JTC1/SC22/WG21 N4431语言规范),具有特定的扩展和限制.有关语言语法的详细说明,请参阅C++ 14规范.