2013-06-02 40 views
0

我有點困惑,爲什麼你可以設置活動的頂點緩衝區數組,但只有一個索引緩衝區?那一個索引緩衝區能否解決所有頂點緩衝區的頂點?如果是這樣,我將如何指定哪個緩衝區是哪個索引所屬的?DX10 +多個頂點緩衝區,單個索引緩衝區

我的另一個問題是,因爲我使用索引三角形列表,索引數據大小與每個網格的頂點數據大小基本相同。我正在考慮爲每個頂點緩衝區創建一個索引緩衝區。我將動態添加網格物體,直到其中一個緩衝區耗盡爲止,此時創建另一個緩衝區。不可避免地,通過這樣做,這對中的一個緩衝區總是會在另一個緩衝區之前填滿,剩下的空間將永遠不會被使用。這個空間是否被標記爲在GPU中保留? 像例如,我可以適應4緩衝區包含32MB的數據,但創建64MB的字節寬度到128MB的vram?

回答

1

相同的索引必須與所有頂點緩衝區同時使用。這樣做的目的是允許不同的頂點緩衝區包含頂點數據的不同組件。例如,您可能決定將位置存儲在一個頂點緩衝區中,並將紋理座標存儲在第二個緩衝區中。第零索引將訪問第一個頂點緩衝區的第一個位置和第二個第一個紋理座標。

如果您想更新每幀的紋理座標但不改變位置,這將節省帶寬。

多個頂點緩衝區也用於實例化。

當您創建頂點或索引緩衝區時,可以指定緩衝區的大小。這些內存然後保留在視頻內存中,不能用於任何其他內容。

所以,如果我理解你的問題,不,你不能適應四個64MB緩衝區到128 MB的內存。

+0

好吧,清除的東西,如何獲得來自多個緩衝區的每個頂點數據會影響性能呢?如果兩個頂點緩衝區都有位置數據會發生什麼?我可以得到兩者並插入動畫等? –

+0

DX10 +中沒有固定的流水線,因此完全取決於您(在編寫着色器時)您對同一個頂點的兩個不同位置所做的操作。通常使用世界矩陣之間的插值來完成動畫,而不是在兩個頂點緩衝區之間進行插值,但這是另一個話題! – gareththegeek