2011-07-13 45 views

回答

3

您可以使用glMapBufferRange將特定範圍的VBO映射到用戶內存中。當然,如果您的頂點,顏色和texcoord數據交錯,它將相當於glMapBuffer

編輯:

如果您的VBO是:

[XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy] 

只能上載紋理通過映射緩衝區([TxTy TxTy TxTy TxTy])和更新的最後一部分座標。你也可以使用glBufferSubData來做到這一點。更新緩衝區比完整緩衝區更快。

但是如果你使用的交織數據:

[XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy] 

然後你就不能更新緩衝區的一部分。

+0

所以答案是我可以只發送類型X的元素我修改,例如texcoords只?這會和使用多個緩衝區一樣快,還是更快? – Rookie

+0

如何使用「XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy」格式的數據?或只是告訴什麼是所謂的方法,我谷歌:) – Rookie

2

您可以將VBO映射到內存空間,然後跨越數據並修改它以更新texcoords。

一個缺點是整個VBO一旦被修改就需要重新發送到視頻內存進行渲染;如果你經常修改,總線帶寬可能會成爲一個問題。

如果您試圖對texcoords進行某種算法修改,則可以使用着色器進行此計算。另一種選擇是在CPU端編寫新值的數組,並將這些值發送給着色器,並在渲染時進行替換;儘管有這個選項,但你也可以從原始的VBO中排除texcoords。

+0

即時將要做動畫,位置變化和照明,我不能使用着色器,因爲我想這個工作在廢話硬件了。 – Rookie