1
我在C++和Eclipse/Visual C++中編寫了一個OpenGL Engine 3D。總的來說,我的引擎有幾個從典型的GameObject虛擬類派生的對象。在我的層次結構中,有幾個層次取決於對象是否有孩子和父母。例如,地形對象的級別爲0.從攪拌機加載的水槽位於水平1等等OpenGL着色語言最佳實踐
問題是根據相應的着色器渲染每個對象的最佳做法是什麼。如果我有一個由同一着色器程序渲染的對象列表,我應該在所有對象之間渲染所有對象VAO:glUseProgram(program_id)... glUseProgram(0),而不是更改每個對象的程序。即:
for each object
glUseProgram(object.program)
...
glBindVertexArray(m_pVao->m_vaoHandle);
for (GLuint i = 0; i < (m_iNumIndex/3); i++)
{
offset = i * 3;
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, &m_Index[offset]);
}
glBindVertexArray(0);
或者:
glUseProgram(object.program)
...
for each object in program.list
glBindVertexArray(object.m_pVao->m_vaoHandle);
for (GLuint i = 0; i < (m_iNumIndex/3); i++)
{
offset = i * 3;
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, &m_Index[offset]);
}
glBindVertexArray(0);
對不起僞僞。
對象可以存儲在std :: vector中,每個着色器都有一個對象列表。