2014-04-21 18 views
0

我正在C++中進行2D遊戲,並在OpenGL上繪製了一個簡單的渲染圖層。我的GLSL Shader對象/包裝器應該封裝加載/設置VertexArrayObject嗎?

我有一個GLSL着色器和着色器程序的包裝器,這些包裝器將着色器對象封裝到C++類中,並自動處理加載/編譯/鏈接和使用着色器程序。

VertexArrayObjects,在我看來,基本上都是配置設置的集合與特定ShaderProgram使用。

我的問題是:我是否應該將VAO封裝在ShaderProgram對象內或Sprite對象內? VAO是以每個着色器爲基礎進行更改還是需要針對每種可繪製對象的新VAO?如果是後者,我是否需要一個VAO來繪製所有的精靈(每個包含4個頂點,一個位置/方向等),還是每個精靈對象在遊戲中都有一個VAO?

+0

真正唯一一次VAO可能與特定GLSL程序相關的是將緩衝區指針匹配到程序所需的特定佈局。如果你用屬性位置等的類似約定編寫所有程序,則不需要任何詳細說明。 –

回答

2

頂點數組對象只是確定OpenGL從哪裏獲取頂點的設置的容器。它們不與任何着色器相關聯;只要頂點屬性匹配,就可以將多個着色器使用相同的VAO。因此,他們應該是他們自己的,單獨的班級。

對於2D精靈基礎的遊戲,你在哪裏大多繪製矩形,我建議乾脆用矩形網格製作一個VAO,並使用它,只要繪製精靈。