我正在开发一个屏幕图像通常是静态的 OpenGL 应用程序。我可以想到 3 种方法来处理这种情况:
- 无论如何,只需一遍又一遍地渲染整个屏幕
- 要求OpenGL仅在有变化时调用渲染循环
- 仅在图像更改时重绘图像,否则立即退出渲染循环
显然,选项 1 会极大地浪费处理能力(即移动设备上的电池充电),而选项 2 将是最佳解决方案。
选项 2 和选项 3 之间的功耗差异可能非常小(如果我错了,请纠正我),因为对渲染循环的不必要调用和任何相关的设置开销应该很小。事实证明,对于我的多线程渲染管道,选项 3 比选项 2 更容易实现。所以,如果我能让它工作,我想先试一试。
当我尝试通过渲染静态图像一次时,屏幕开始在该图像和黑色之间疯狂地闪烁。我的猜测是这是由于双重(或三重?)缓冲:我的图像只被绘制到一个缓冲区中,但是在每次调用渲染循环时,缓冲区都会翻转,因此图像最终会出现在仅当该缓冲区恰好是活动缓冲区时才筛选。
简单的解决方案:在每个缓冲区中绘制一次静态图像,然后才立即开始退出渲染循环。
为此,我需要知道缓冲区的数量,即我需要绘制图像的次数。有没有办法查询这个号码?或者,如果我的渲染循环变成 NO-OP,我可以以某种方式阻止缓冲区切换吗?
我正在构建此代码的 OpenGL ES 1.0 和 OpenGL ES 2.0 版本,以获得最大的设备支持。