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));
}