1
我已經爲OpenGL中的設計粘貼了一個僞代碼。OpenGL - 渲染循環內創建VAO是不錯的選擇?
我有什麼:
- 在功能上createVAOs()波紋管,我創建了所有我想要的頂點(VBO),以及指數(EBO)來繪製一些漂亮的廣場。
- 然後,在主循環中,在函數draw_textures()中,我綁定了紋理,並將具有紋理的元素繪製到VBO上的頂點。
我想要什麼:
- 現在我要動態地改變VAO。讓我們來想象一下:我想添加一個新的紋理到一個特定的三角形,甚至刪除我的VAO上的一些三角形。但由於VAO被循環之前創建的,我有一個問題...我不知道這是否是「明智的」或「優化」創建循環內的VAO的每次..
我問題:
- 明智的做法是將VAO(VBO和EBO)的創建放置在渲染循環中?如果不是,那麼最好的解決方案是什麼?
考慮我的僞代碼波紋管:
int main (void)
{
//Init OpenGL, Glew,etc
//Load Shaders
createVAOs(); //triangles vertices (VBO) and indices (EBO)
while (!glfwWindowShouldClose(m_window)) //the LOOP!
{
//updateEvents();
//use shaders
//bindVAO();
/*createVAOs();*/ //<---- is this wise??
draw_textures();
//freeVAO
//swapBuffers
}
return 0;
}
void draw_textures()
{
glBindTexture(GL_TEXTURE_2D, texture.id());
glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, (void*)(0));
}