Apple 的文档说我做的一切都是正确的,但是我遇到了一个严重的崩溃,Apple 的驱动程序在一个简单的 OpenGL ES 2 程序上内部 100% 可重现地崩溃。
在遵循 Apple 关于多线程访问的说明时,Apple 的驱动程序中似乎存在一个重大错误 wrt 多线程访问。或者......我在文档中遗漏了一些东西,即使我已经阅读过,多次重新阅读它们:(。
我会非常乐意使用 NSOperations或GCD (无论如何,它们在后台实现相同),但我无法工作。
这是我知道/尝试过的:
- 全部在主线程上=工作正常:
- 设置 GL,渲染单个三角形,加载纹理,加载几何体,渲染整个场景
- GCD =后台GCD“完成”后立即硬崩溃
- 在主线程上设置 GL,渲染单个三角形
- dispatch_async() 创建新的 EAGLContext,加载纹理,几何
- 在主线程上渲染
- NSOperationQueue =后台GCD“完成”后立即崩溃
- 在主线程上设置 GL,渲染单个三角形,创建新的 NSOperationQueue
- addOperationWithBlock:创建新的 EAGLContext,加载纹理,几何
- 在主线程上渲染
附加说明/Apple 指示我们做的事情:
- 已检查:我通过共享 ShareGroup 属性将新的 EAGLContext 连接到旧的
- 已检查:我在加载纹理 + 几何图形后立即明确尝试 glFlush() (两种方式都没有效果)
- 检查:我尝试重新使用原始线程的 EAGLContext(坏主意!) - 不同的崩溃,这并不奇怪,因为 Apple 说这是未定义的并且会崩溃