Chr*_*bek 10 c++ opengl video-streaming
我不清楚OpenGL规范中的Sync对象,是否使用glGetSynciv或者glClientWaitSync我想在不等待的情况下检查同步对象的信号.以下两个命令如何在行为和性能方面进行比较:
GLint syncStatus;
glGetSynciv(*sync, GL_SYNC_STATUS, sizeof(GLint), NULL, &syncStatus);
bool finished = syncStatus == GL_SIGNALED;
Run Code Online (Sandbox Code Playgroud)
VS
bool finished = glClientWaitSync(*sync, 0 /*flags*/, 0 /*timeout*/) == ALREADY_SIGNALED;
Run Code Online (Sandbox Code Playgroud)
问题的一些细节:
glGetSynciv执行到GL服务器的往返?一些背景:
这两种方法都有人使用它们以便不等待的例子,但似乎没有人讨论使用其中一种的优点.
引用红皮书的话,
void glGetSynciv(GLsync 同步,GLenum pname,GLsizei bufSize,GLsizei *长度,GLint *值);
检索同步对象的属性。sync 指定同步对象的句柄,从中读取pname指定的属性。bufSize是缓冲区的大小(以字节为单位),其地址在value中给出。lenght是整数变量的地址,该变量将接收写入值的字节数
而对于glClientWaitSync:
GLenum glClientWaitSync(GLsync 同步、GLbitfields 标志、GLuint64 超时);
导致客户端等待同步对象发出信号。 glClientWaitSync()将等待最多超时纳秒,以便对象在生成超时之前发出信号。flags参数可用于控制命令的刷新行为。指定GL_SYNC_FLUSH_COMMANDS_BIT相当于在执行wait之前调用glFlush()。
因此,基本上,glGetSynciv()用于了解栅栏对象是否已发出信号,而glClientWaitSync()用于等待栅栏对象是否已发出信号。
如果您只想知道栅栏对象是否已发出信号,我建议使用glGetSynciv()。显然glClientWaitSync() 应该比glGetSynciv()花费更长的时间来执行,但我猜测。希望我对你有帮助。
| 归档时间: |
|
| 查看次数: |
860 次 |
| 最近记录: |