緩衝區簡介
緩衝區資源是完整型別資料的集合,分組為元素。 緩衝區會將資料儲存在頂點緩衝區中、索引緩衝區中的索引、常數緩衝區中的著色器常數資料、位置向量、標準向量或裝置狀態。
緩衝區項目會由 1 到 4 個元件組成。 緩衝區項目可包含封裝的資料值 (例如 R8G8B8A8 表面值)、單一 8 位元整數,或四個 32 位元浮點值。
緩衝區會以非結構化資源的形式建立。 由於緩衝區為非結構化,因此無法包含任何 Mipmap 層級,它在讀取時不會進行篩選,而且無法進行多重取樣。
緩衝區類型
Direct3D 11 支援下列緩衝區資源類型。
頂點緩衝區
頂點緩衝區包含用來定義幾何的頂點資料。 頂點資料包含位置座標、色彩資料、紋理座標資料,以及一般資料等。
最簡單的頂點緩衝區範例,就是包含位置資料的頂點緩衝區。 其視覺化呈現方式會如下圖所示。
許多時候,頂點緩衝區會包含完整指定 3D 頂點所需的一切資料。 其中一個範例,就是包含每一頂點位置、一般和紋理座標的頂點緩衝區。 通常,這項資料會組織為一組每一頂點項目,如下圖所示。
這個頂點緩衝區包含每一頂點資料;每個頂點會儲存三個項目 (位置、一般和紋理座標)。 通常,位置和一般都會使用三個 32 位元浮點值指定,而紋理座標則會使用兩個 32 位元浮點值指定。
若要從頂點緩衝區存取資料,您需要掌握所欲存取的頂點為何,以及下列幾個額外緩衝區參數:
- Offset - 從緩衝區開頭到第一個頂點資料的位元組數。
- BaseVertexLocation - 從 Offset 到適當繪製呼叫所使用之第一個頂點的位元組數。
建立頂點緩衝區前,您需要先定義其配置。 建立輸入配置物件後,請將其繫結至輸入組合語言 (IA) 階段。
索引緩衝區
索引緩衝區包含置入頂點緩衝區的整數位移,可用來更有效率地轉譯原始物件。 索引緩衝區包含一組循序的 16 位元或 32 位元索引;每個索引都會用來識別頂點緩衝區中的頂點。 索引緩衝區的視覺化呈現方式會如下圖所示。
儲存在索引緩衝區中的循序索引會具有下列參數:
- Offset -距離索引緩衝區基底位址的位元組數。
- StartIndexLocation - 指定基底位址和位移的第一個索引緩衝區項目。 開始位置代表所欲轉譯的第一個索引。
- IndexCount - 要轉譯的索引數。
索引緩衝區的開始位置 = 索引緩衝區基底位址 + 位移 (位元組) + StartIndexLocation * ElementSize (位元組)。
在這個計算中,ElementSize 代表每個索引緩衝區項目的大小,也就是兩個位元組或四個位元組。
常數緩衝區
常數緩衝區可讓您效率十足地將著色器常數資料提供給管線。 使用常數緩衝區,您就能儲存資料流輸出階段的結果。 就概念上而言,常數緩衝區看起來就像單一項目頂點緩衝區,如下圖所示。
視儲存的資料格式而定,每個項目都會儲存一個包含 1 個至 4 個元件的常數。
常數緩衝區只能使用單一繫結旗標,該旗標無法和其他任何繫結旗標合併。
若要透過著色器讀取著色器常數緩衝區,請使用 HLSL 載入函式。 每個著色器階段最多允許 15 個著色器常數緩衝區;每個緩衝區最多可以保存 4096 個常數。
相關主題