我有我的VBO此刻使用單個緩衝區,它有頂點,texcoord和顏色元素。僅修改VBO緩衝區數據的特定元素類型?
現在,是否有可能只更新有效的texcoords而不更新頂點/顏色呢?它應該與更新單獨緩衝區的效率相同。
我有我的VBO此刻使用單個緩衝區,它有頂點,texcoord和顏色元素。僅修改VBO緩衝區數據的特定元素類型?
現在,是否有可能只更新有效的texcoords而不更新頂點/顏色呢?它應該與更新單獨緩衝區的效率相同。
您可以使用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]
然後你就不能更新緩衝區的一部分。
您可以將VBO映射到內存空間,然後跨越數據並修改它以更新texcoords。
一個缺點是整個VBO一旦被修改就需要重新發送到視頻內存進行渲染;如果你經常修改,總線帶寬可能會成爲一個問題。
如果您試圖對texcoords進行某種算法修改,則可以使用着色器進行此計算。另一種選擇是在CPU端編寫新值的數組,並將這些值發送給着色器,並在渲染時進行替換;儘管有這個選項,但你也可以從原始的VBO中排除texcoords。
即時將要做動畫,位置變化和照明,我不能使用着色器,因爲我想這個工作在廢話硬件了。 – Rookie
所以答案是我可以只發送類型X的元素我修改,例如texcoords只?這會和使用多個緩衝區一樣快,還是更快? – Rookie
如何使用「XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy」格式的數據?或只是告訴什麼是所謂的方法,我谷歌:) – Rookie