OpenGL 绘图的机制是: 先用 OpenGL 的绘图上下文 Rendering Context (简称为 RC)把图画好,再把所绘结果通过 SwapBuffer() 函数传给 Window 的 绘图上下文 Device Context (简记为DC).要注意的是,程序运行过程中,可以有多个 DC,但只能有一个RC。因此当一个 DC 画完图后,要立即释放 RC,以便其它的
DC 也使用。
glFlush:将GL命令队列中的命令发送给显卡并清空命令队列,发送完立即返回;
glFinish:将GL命令队列中的命令发送给显卡并清空命令队列,显卡完成这些命令(也就是画完了)后返回。
这里就会发现这样一件事情:无论如何,都要等glFinish返回了,如果GPU绘制需要比较多的时间,那么CPU在这里等待的时间就比较可观了,如何提高CPU效率呢?个人认为有两个办法:
1、使用多线程。将更新和渲染作为线程A,辅助性计算如AI策略、**图生成作为线程B。那么当线程A因为glFinish阻塞时,线程B便可以利用CPU进行计算。
2、使用CPU时间预算方法。即先给出一帧所需要的时间预算,在调用glFinish之前判断是否还有多的时间预算,若有多,则先作辅助计算,完成或超过预算时间后才调用glFinish(若此时GPU已经完成命令,就不需要等待了)
http://blog.sina.com.cn/s/blog_4e6f376d0100c0o2.html