我有一个Objective-C iOS应用程序,它使用第三方C库渲染到屏幕外的OpenGL帧缓冲区 . 渲染在一个单独的线程中异步发生 . 它使用使用sharegroup创建的上下文,以便生成的帧缓冲内容可以直接作为纹理访问,以供主线程呈现 .

myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:mainGlContext.sharegroup];

当第三方库完成渲染(可能需要很长时间)时,回调会警告主线程,主线程会检索textureID并呈现它 .

这一切都很好,除了:第三方库中有一个可选层,它有很多很多对象,渲染时间特别长 . 当我打开这一层时,主线程经常在第三方库渲染时阻塞,导致帧速率急剧下降和糟糕的用户体验 .

我希望能够使用该特定图层 . 较长的渲染时间并未验证第三方调用是否在主线程上进行 .

我已经使用系统跟踪在Xcode中对此进行了检测...主线程渲染的所有阻塞都发生在调用第三方渲染方法期间,并且似乎与违规层的渲染一致

这可能是由于两个线程争用GPU而发生的吗?如果是这样,有没有修复?如果没有,其他可能的原因是什么?