【发布时间】:2016-09-01 15:22:03
【问题描述】:
我对使用 glClientWaitSync 函数有一个误解。
承认我正在使用类似的东西:
glDraw(...);
sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
glDraw(...);
glClientWaitSync(sync, GL_SYNC_FLUSH_COMMANDS_BIT, 1000000000);
glDeleteSync(sync);
如果我很了解 OpenGL Wiki,我们有两种情况
第一种情况:OpenGL 4.5:在这种情况下,在 glClientWaitSync 之后,我们确定只执行第一次绘制,因为它是写在 wiki 上的:
在 OpenGL 4.5 中,此刷新是特殊的。如果这是您第一次等待该特定同步对象,并且等待是在创建同步对象的同一上下文中,则刷新的行为就像您在同步对象之后立即发出它一样。因此,如果您在创建同步对象后发出了其他 OpenGL 命令,它们将不会被刷新。
第二种情况:OpenGL 4.4 或更低版本:我们确定这两种绘图都已执行,因为此函数具有“全局”与 glFlush 函数相同的行为? 那样的话,如果所有命令缓冲区都被刷新,如何真正使用 OpenGL 4.4 循环方式使用持久映射?
【问题讨论】: