2016-04-23 43 views
0

我將在一個VBO中具有相同格式的頂點數據組合在一起,根據這些對象使用並使用單個glDrawArrays()調用渲染它們的材質分配頂點屬性。OpenGL批處理和禁用對象

這是所有的工作,直到我必須禁用一些對象(如object1)在運行時渲染。這甚至可能,假設我已經設置了所有的頂點屬性和東西?最好不要使用批處理,並且每個對象都有vbo/vao(然後,如果一個對象被禁用,就不要調用glDraw*())?

回答

0

批處理需要將所有數據放在一個緩衝區中,但批處理不是有限的。批次是關於減少繪製調用的次數。把你的數據放在一個緩衝區中就是必需的,但這還不夠。

將所有頂點數據放在一個緩衝區中單獨使用相對於不得不切換緩衝區和頂點格式而言具有性能優勢。您無需一路將所有內容分配到單個繪圖調用中,以提高每個對象使用緩衝區的性能。

在OpenGL中,as discussed in this video,多個繪製調用的主要成本不是繪製調用本身。這是您通常在之間撥打電話的狀態更改。

你已經把你的頂點數據放在同一個緩衝區,並且你必須設法消除對象之間的階段變化,如果你可以用一個繪製調用渲染所有東西。那時,你已經獲得了大部分的表現。接受並轉向其他更低的水果。