glFlush什么时候调用得太多?

时间:2019-07-12 15:55:39

标签: c++ opengl

我有一个应用程序,每帧发出大约100个调用,每个调用带有一个单独的VBO。 VBO通过glBufferData上载在具有gl上下文资源共享的单独线程中。渲染线程通过glClientWaitSync测试缓冲区上传状态。

现在我的问题:

根据文档glClientWaitSyncGL_SYNC_FLUSH_COMMANDS_BIT导致每次调用都刷新,对吗?这意味着对于上载线程中每个尚未完成的glBufferData,我都会在渲染线程中进行数十次刷新,对吗?如果在最坏的情况下实际上在每次抽奖前都发出冲洗,将会对性能产生什么影响?

1 个答案:

答案 0 :(得分:2)

GL_SYNC_FLUSH_COMMANDS_BIT的行为已从其原始规范中更改。

在原始版本中,使用该位等效于在等待之前发出glFlush

但是,GL 4.5更改了措辞。现在,这等同于在提交该同步对象后立即执行刷新。也就是说,与其相对于当前流进行刷新,不如提交同步后刷新。因此,重复使用并不意味着反复冲洗。

通过提交同步对象后手动发出刷新,然后在等待时不使用GL_SYNC_FLUSH_COMMANDS_BIT,您当然可以得到同等的行为。