什么时候调用 glFlush 太频繁了

When is glFlush called too often?

本文关键字:调用 glFlush 什么时候      更新时间:2023-10-16

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

现在我的问题:

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

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

原版中,使用该位相当于在执行等待之前发出glFlush

但是,GL 4.5改变了措辞。现在,它相当于在提交该同步对象后立即执行刷新。也就是说,它不是相对于当前流进行刷新,而是像您在提交同步后刷新一样工作。因此,重复使用并不意味着反复冲洗。

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