OpenGL ES:使用glClear还是将glDrawArrays与在使用过的帧上渲染的基元一起使用更有效



例如,如果我在黑色背景上渲染了几个图形,那么在每帧调用glClear(GL_COLOR_BUFFER_BIT),还是在过去帧的伪影上渲染黑色三角形更有效?我认为在伪影上渲染黑色三角形会更快,因为需要更改的像素比清除整个屏幕要少。然而,我也在网上读到,一些驱动程序和图形硬件在使用glClear(GL_COLOR_BUFFER_BIT)时会进行优化,而在渲染黑色三角形时则无法进行优化。

一些你忽略的事情可能会改变你对的看法

  • 在顶部绘制三角形在深度测试中效果不佳。所以你必须先禁用测试
  • 在顶部绘制三角形必须严格按照先前的结果进行排序。而glClear打破了数据依赖关系,允许无序执行开始绘制下一帧,只要有足够的内存让两个帧缓冲区独立存在
  • 为了避免撕裂效果,双缓冲无论如何都使用多个帧缓冲区。因此,要使用前一帧的结果作为新帧的起点,不仅要等待前一帧完成渲染,还必须将其帧缓冲区复制到新帧的缓冲区中。这需要触摸每个像素
  • 在单个缓冲场景中,在前一帧的顶部绘制不仅需要完成渲染,还需要完成将其流式传输到显示设备。这只剩下渲染整个新帧的消隐间隔。这几乎肯定会阻止实现最大帧速率

通常,清除会像复制一样触及每个像素,但不需要刷新管道。所以最好用glFlush开始一帧。

相关内容

最新更新