2012-05-18 77 views
1

我正在爲遊戲編寫自己的渲染器。我有一個Geometry類,它以VBO(頂點緩衝對象)的形式封裝幾何數據。幾何也有一個對InputLayout類型的對象的引用,它存儲關於幾何數據的信息。 InputLayout實例在幾何實例之間共享。我正在使用InputLayout在「draw call」(例如glDrawArrays())之前正確配置管道(例如glVertexAttribPointer())。配置例程的效率有點低,因爲我必須掃描活動頂點着色器的活動屬性,然後在活動的InputLayout實例中查找這些屬性。我想通過使用VAO自動化整個過程。針對不同的VBO使用OpenGL VAO

這就是問題所在。我應該爲每個着色器/ InputLayout對或每個着色器/幾何對創建一個VAO嗎?通過爲每個着色器/ InputLayout對創建VAO,我必須在每次繪製調用之前更改VAO中的緩衝區綁定。是否值得重新渲染我的渲染器併爲每個着色器/幾何對創建VAO?

回答

6

使用VAO的目的是讓你不必經常改變它們。你綁定一個VAO並渲染。由於關聯的緩衝對象是VAO狀態的部分,因此唯一的方法是讓VAO存儲實際的緩衝區,而不僅僅是「佈局」。

+0

那就是我想知道的。謝謝 – runnydead