首页 > 解决方案 > 多上下文/多线程场景下GL_SYNC_FLUSH_COMMANDS_BIT和glFlush的区别

问题描述

我有一个多线程场景,其中一个用于渲染的前台 OpenGL 上下文和一个用于上传的背景 OpenGL 上下文,并激活了上下文资源共享。在后台线程发出 glBufferData 后,它使用 glFenceSync 创建一个栅栏,然后调用 glClientWaitSync 并设置 GL_SYNC_FLUSH_COMMANDS_BIT。然而,这似乎并不能保证刷新,因为主线程永远等待栅栏发出信号。只有用 glFlush 替换 glClientWaitSync 才能完成这项工作。

有人能告诉我为什么吗?

C++、Linux、GLES 3.2

问候

标签: opengl-es

解决方案


有人能告诉我为什么吗?

最可能的答案是驱动程序有问题。根据规范GL_SYNC_FLUSH_COMMANDS_BIT应该相当于插入 a glFlush(),所以如果不是,这听起来像是一个实现问题。


推荐阅读