2017-05-08 59 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]; 
} 

我對[[position]]部分和類似用途的函數定義特別困惑。

+0

我沒有你的答案,但我相信你應該看金屬着色語法而不是Objective-C。 –

+1

這是C++語法不是Objective-C。 MSL基於C++。 – Marius

回答

3

金屬着色語言在https://developer.apple.com/metal/metal-shading-language-specification.pdf

特別的外觀,文件第68頁上的記錄在「表9」。 [[position]]被確定爲頂點函數返回類型的屬性限定符。我認爲這意味着當你的頂點着色器返回調用者時,將使用該部分結構中的值來確定着色器想要修改的頂點的位置。

+0

感謝您分享鏈接!現在我明白,還有一些更多,然後是語法。 但是,就像我理解int [5]創建/意味着在內存中的大小爲5的數組。 因此,類似地只通過語法,[[]]做/意味着什麼?這種初始化是否有名稱? – Anurag

+1

我只能通過我在上面的文檔中讀到的內容以及我所瞭解的着色語言。 [[]]語法爲它所連接的實體標識一個「屬性」。有關變量或字段的元信息對於它在着色器中扮演的角色有意義。 –

1

我沒有足夠的信譽來回應您對括號名稱的評論,但[]括號是從C++ 11獲取的屬性語法。

1

金屬基於C++,這只是C++ 11中屬性的語法。有關語法的更多詳細信息,請參閱this

相關問題