2016-12-30 31 views
2

OpenGL的分配多個物體一次一次或不

glCreateBuffers(1,&handle); 
... 
glDeleteBuffers(1,&handle); 

具有可創建函數和多個對象我猜的意圖是可以節省時間來創建/立刻銷燬所有對象。但是,這只是在初始化時,還是會影響內存佈局,例如增加局部性,導致渲染時間縮短。

之前這個問題被標記爲重複的Is there an advantage to generating multiple indexes (names) at once in OpenGL?,這個問題是關於對象創作與ARB_direct_state_access,而不是創作,這RetoKoradi評論很便宜。

回答

1

的VRAM不是磁盤,它是一個ř andom CCESS 中號埃默裏。 OpenGL不需要掃描它以獲取相關信息。通常有一個內存表存儲在某處,它跟蹤緩衝區和頂點數組的位置。還有一個指向當前VAO,VBO,IBO,紋理,幀緩衝區等的指針。

當您使用其中一個glBindXYZ函數時,您將傳遞一個句柄給OpenGL。然後它從內存表中查找指向bufffer/vertex array/texture/etc的指針,並將相關指針設置爲結果。

gen函數是這樣工作的,因爲大多數人知道他們需要多少個vbos或vaos,這使得創建它們變得更容易。這只是一個問題,當你有不同數量的vbos時。

一次創建多個緩衝區並不比一個一個地依次在內存佈局方面創建它們更有優勢。無論

glCreateBuffers(1, &handle1); 
// Stuff 
glCreateBuffers(1, &handle2); 
// Stuff 
glCreateBuffers(1, &handle3); 
// Stuff 

glCreateBuffers(3, &handles); 
// Stuff x 3 

結果相同。在這兩種情況下,vbos都儘可能地接近(如果它們已經用完了下一個vbo應該去的內存塊,那麼它會離其他的更遠一些。)

+0

難道downvoters會告訴我什麼是我的錯回答? –

+0

也許是因爲它不回答關於內存佈局的問題。 – user877329

+0

@ user877329不,但它回答了問題,爲什麼你不應該關心它 –

相關問題