2017-06-28 139 views
-1

是否有任何方法可以爲OpenGL中的GL_ELEMENT_ARRAY_BUFFER保留內存,例如Cuda中的std :: vector或thrust :: device_vector的.reserved(int)?假設我在frame1上有200個三角形(600個索引),但frame2上有250個全新的三角形(750個索引)。我如何在開始時預留一次並在每一幀更新它?OpenGL中的保留內存

回答

0

一旦你分配了一個緩衝區對象,並且調用了一個glBufferData(),那麼將分配回它的內存。您可以將空數據指針傳遞給第一個glBufferData()調用,以創建一個沒有數據上傳的只分配緩衝區。

您可以使用glBufferSubData()修補現有緩衝區而無需重新分配,但只要確保不嘗試修補仍在現有繪製調用中引用的緩衝區。請參閱...

https://community.arm.com/graphics/b/blog/posts/mali-performance-6-efficiently-updating-dynamic-resources

瞭解更多詳情。

+0

謝謝,但它似乎像運行時間增加時,我保留更多的內存,雖然繪製相同數量的點。 – huyluu11

+0

你確定你確實足夠管道資源更新(例如,不要更新仍然被繪圖引用的緩衝區)嗎?如果你的流水線不夠深,那麼資源重影一個更大的緩衝區會減慢速度(更多的內存分配,更多的副本)。 – solidpixel