【发布时间】:2017-04-19 04:23:40
【问题描述】:
我正在观看 Apple 关于 Metal 和 MetalKit 的介绍视频。
着色器的示例代码包含这些双括号,例如 [[buffer(0)]] 参数。为什么有两个括号?这是什么意思,还是只是表明后面有关键字“缓冲区”?标准 c++ 中没有这样的构造,是吗?
vertex Vertex vertex_func(constant Vertex *vertices [[buffer(0)]],
constant Uniforms &uniforms [[buffer(1)]],
uint vid [[vertex_id]])
另外,作为 GP-GPU 简介的 1 或 2 周有趣的项目是什么?对于具有良好数学技能但没有艺术技能的新手来说,这是可以管理的。
【问题讨论】:
-
另外,我写的用于操场的无耻插件,如果您刚刚学习如何使用 Metal,这可能会有所帮助:github.com/jtbandes/Metalbrot.playground
-
哦,所以它是一个属性,它只是说明在哪里可以找到顶点变量。唤醒大脑。我太沉迷于双 [。不过,知道他们为什么选择两个 [ 而不是一个?
-
可能是为了避免使用常规数组下标语法产生歧义。
int x[length];与int x[[some_attr]];. -
可能。仍然在函数头中,我希望有更多的 doStuff([int] x) 或 doStuff(x: [Int]) 而不是 doStuff(int x[length])。这甚至意味着什么?再说一次,我也是 C++ 的新手。如果你把你的答案放在回复中,我会投赞成票。