(十三)同步对象和栅栏

OpenGL ES 3.0为应用程序提供了等待一组OpenGL操作在GPU上执行结束的机制。

同步多个图形上下文和线程中的GL操作,这对于许多高级图形应用来说很重要。

刷新和结束

OpenGL ES 3.0 API继承了OpenGL的客户端-服务器模型。应用程序(客户端)发出命令,命令由OpenGL ES(服务器)实现处理。
glFlush命令用于数显当前OpenGL ES上下文中未决的命令,并将它们发往服务器。
如果客户端要求这些命令完成,应该使用glFinish命令

为什么使用同步对象

OpenGL ES 3.0引入了一个称作栅栏的新特性,可以在GL命令中出入栅栏命令,然后将与需要等待的同步对象关联。

创建和删除同步对象

GL命令流中插入栅栏命令并创建同步对象:

GLsync glFenceSync(GLenum condition, GLbitfield flags)

删除同步对象:

GLvoid glDeleteSync(GLsync sync)

等待和向同步对象发送信号

glClientWaitSync调用阻塞客户,并等待一个同步对象收到信号:

GLenum glClientWaitSync(GLsync sync, GLbitfield flags,
GLuint64 timeout)

glWaitSync立即返回且阻塞GPU,直到同步对象收到信号:

void glWaitSync(GLsync sync, GLbitfield flags,
GLuint64 timeout)

小结

本章主要讲解OpenGL ES 3.0中宿主应用和GPU执行同步的基础知识。

你可能感兴趣的:((十三)同步对象和栅栏)