我正在观看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周的有趣项目?对于具有良好数学技能但没有艺术技能的新手来说,这是可以管理的。
答案 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之间的