我有一个应用程序,每帧发出大约100个调用,每个调用带有一个单独的VBO。 VBO通过glBufferData
上载在具有gl上下文资源共享的单独线程中。渲染线程通过glClientWaitSync
测试缓冲区上传状态。
现在我的问题:
根据文档glClientWaitSync
和GL_SYNC_FLUSH_COMMANDS_BIT
导致每次调用都刷新,对吗?这意味着对于上载线程中每个尚未完成的glBufferData
,我都会在渲染线程中进行数十次刷新,对吗?如果在最坏的情况下实际上在每次抽奖前都发出冲洗,将会对性能产生什么影响?
答案 0 :(得分:2)
GL_SYNC_FLUSH_COMMANDS_BIT
的行为已从其原始规范中更改。
在原始版本中,使用该位等效于在等待之前发出glFlush
。
但是,GL 4.5更改了措辞。现在,这等同于在提交该同步对象后立即执行刷新。也就是说,与其相对于当前流进行刷新,不如提交同步后刷新。因此,重复使用并不意味着反复冲洗。
通过提交同步对象后手动发出刷新,然后在等待时不使用GL_SYNC_FLUSH_COMMANDS_BIT
,您当然可以得到同等的行为。