我正在研究一個使用OpenGL ES 2.0的非常小的遊戲引擎。將VBO集成到我的網格類中,我遇到了一些設計問題。跨多個網格對象共享VBO
問題是我不想爲每個網格實例化一個新的VBO,並且我希望VBO的大小由我加載的網格數決定(不僅僅是一個2MB的固定大小或者某個東西)。
由於沒有VBO的realloc函數,我需要一次批量加載所有頂點數據。這是好的,因爲我只有4或5個小網格。所以我創建了一個MeshList類。
我調用MeshList.AddMesh(Mesh網格),它聚合網格對象的頂點/索引數據,並將頂點數據/索引數據的偏移量返回到添加的網格。這樣網格就知道它在VBO中的位置(但不知道它在哪個VBO中)。
但是,在調用MeshList.BindToVBO()之前,沒有任何MeshList數據上傳到VBO。但是現在,我的網格中沒有一個知道它們在哪個VBO中。所以我正在考慮在MeshList中創建一個指向數組的指針,它指向每個Mesh類中的整數成員變量,它們將保存VBO句柄。這樣,當調用BindToVBO()時,它遍歷指針數組並更新網格對象中的VBO句柄。
我想通過這種方式,我可以靈活地在不同的維修機構或不同的維修機構中使用不同的網格對象。我唯一擔心的是這是否是一個好設計。
對於那些對MeshList.BindToVBO()更新整個網格對象的代碼進行一番審視並不清楚。我的意思是,MeshList確實在BindToVBO()調用之前與所有Mesh對象進行交互,但沒有任何明確說明通過將Mesh對象傳遞給MeshList.AddMesh(),它本質上是訂閱它的VBOHandle成員以在某些時刻更新未來。
我試過儘可能地澄清這一點。讓我知道是否需要澄清。
這種方法引發的一個後果就是將網格數據的生命週期綁定在一起。如果你想更換一個網格與另一個?您可以上傳完整的網格數據,也可以對VBO數據緩衝區進行分段。 – 2012-04-27 05:20:06