Nic*_*las 8 opengl asynchronous
定义OpenGL函数,就好像它们同步运行一样.但渲染函数(和其他函数)通常由GPU异步执行.OpenGL会有效地隐藏这一点:如果你做了一些需要操作结果的事情(例如从已经渲染到的帧缓冲区中读取),OpenGL将停止CPU操作,直到GPU达到该点.
这是功能性的,但对性能来说并不理想,因为CPU基本上会阻塞,直到完成GPU.有没有办法确定特定操作是否已完成,以便您知道在没有太多CPU阻塞的情况下执行相关操作?
就在这里.假设您可以访问OpenGL 3.2+或ARB_sync扩展.
如果您想知道特定命令何时完成,可以在发出该命令后立即将"fence" 同步对象插入命令流.这是通过该glFenceSync
功能完成的.
您必须存储此函数返回的指针.使用该指针,您可以通过检查是否使用该glGetSync
函数发出栅栏信号来查询栅栏是否已完成.像这样:
GLint isSignaled = 0;
glGetSync(syncObj, GL_SYNC_STATUS, 1, NULL, &isSignaled);
if(isSignaled == GL_SIGNALED)
{
//Prior commands have completed.
}
else
{
//Not done yet.
}
Run Code Online (Sandbox Code Playgroud)
如果你用完了其他的东西,你不需要等待同步对象完成; 你可以做任何你想做的OpenGL过程.这将导致你的CPU阻止.
完成同步对象后,必须将其删除.使用此glDeleteSync
功能.
归档时间: |
|
查看次数: |
945 次 |
最近记录: |