我不清楚OpenGL规范中的Sync对象,是否使用glGetSynciv
或者glClientWaitSync
我想在不等待的情况下检查同步对象的信号.以下两个命令如何在行为和性能方面进行比较:
GLint syncStatus; glGetSynciv(*sync, GL_SYNC_STATUS, sizeof(GLint), NULL, &syncStatus); bool finished = syncStatus == GL_SIGNALED;
VS
bool finished = glClientWaitSync(*sync, 0 /*flags*/, 0 /*timeout*/) == ALREADY_SIGNALED;
问题的一些细节:
是否glGetSynciv
执行到GL服务器的往返?
在驱动程序支持/错误方面是否有任何首选方法?
可能是方法死锁还是不立即返回?
一些背景:
这适用于视频播放器,它将图像从物理源流式传输到GPU进行渲染.
一个线程是流式/连续上传纹理,另一个线程在完成上传后呈现它们.每个渲染帧我们正在检查下一个纹理是否已完成上传.如果有,那么我们开始渲染这个新纹理,否则继续使用旧纹理.
决定只是客户端,我不想等待,但很快就会继续呈现正确的纹理.
这两种方法都有人使用它们以便不等待的例子,但似乎没有人讨论使用其中一种的优点.