2017-05-08 9 views
3

float4 position [[position]];は次のスニペットで何をしますか?メタル言語の "位置"の前後にある二重角括弧は何を意味しますか?

#include <metal_stdlib> 
using namespace metal; 

struct Vertex 
{ 
    float4 position [[position]]; 
    float4 color; 
}; 

vertex Vertex vertex_main(device Vertex *vertices [[buffer(0)]], uint vid [[vertex_id]]) 
{ 
    return vertices[vid]; 
} 

私は、特に機能定義での部分的な使用と同様の使用法で混乱しています。

+0

私はあなたに答えがありませんが、Objective-Cではなく金属シェーダーの構文を調べるべきだと思います。 –

+1

これはObjective-CではなくC++構文です。 MSLはC++に基づいています。 – Marius

答えて

3

はメタルシェーディング言語は、その文書の68ページの「表9」で特定の表情でhttps://developer.apple.com/metal/metal-shading-language-specification.pdf

で文書化されています。そこでは、[[position]]は、頂点関数の戻り型の属性修飾子として識別されます。これは、頂点シェーダが戻るときに、呼び出し元がシェーダが変更したい頂点の位置を決定するために構造体のその部分の値を使用することを意味します。

+0

リンクを共有してくれてありがとう!今私はそれにいくつかの構文があることを理解しています。 しかし、私はint [5]がメモリ内にサイズ5の配列を作成する/意味することを理解しています。 同様に構文だけで、[[]]は何を意味するのですか?この種の初期化には名前がありますか? – Anurag

+1

私は上の文書で読んだことと、シェーディング言語について私が知っていることだけで行くことができます。 [[]]構文は、それが接続されているエンティティの「属性」を識別します。変数またはフィールドに関するメタ情報。シェーダでどのような役割を果たしているかを意味します。 –

1

括弧の名前についてのあなたのコメントに答えるには十分な評判はありませんが、[[]]括弧はC++ 11の属性構文です。

1

メタルはC++に基づいており、これはC++ 11の属性の構文に過ぎません。文法の詳細については、thisを参照してください。

関連する問題