我已经为我在 OpenGL 中设计的内容粘贴了一个伪代码。
我有的:
- 在下面的函数 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));
}