最近在实现烟雾模拟的时候,看到有一个人的代码运行的时候帧率非常低。一开始,我用了clock去查看他代码各个部分所花的时间,发现,在glutSwapBuffers的时候特别花时间,当时很是不解,以为是数据量过大导致渲染的时候比较耗时间。后来进一步检查代码,发觉问题确实是出现在这里,只不过不是数据量大的原因,而是他的代码中还使用了glFlush。下面说说这两个的作用和区别吧:
函数原型:
void glFlush(void void)
void glutSwapBuffers(void)
函数说明:
glFlush 是强制马上输出命令执行的结果,而不是存储在缓冲区中,继续等待其他OpenGL命令。
当执行双缓冲交换的时候,使用glutSwapBuffers。
但是在有 glutSwapBuffers 的情况下, 不需要 glFlush 就可以达到同样的效果,因为我们执行双缓冲交换的时候,就隐形的执行了一次刷新操作。
所以,设置了双缓冲的时候,一般是使用glutSwapBuffers,而不是使用glFlush,如果两个都使用了,那么就会出现渲染帧率很低的情况