【发布时间】:2013-11-01 01:02:28
【问题描述】:
Apple 的文档说我做的一切都是正确的,但我遇到了严重的崩溃,Apple 的驱动程序在一个简单的 OpenGL ES 2 程序上 100% 重复地在内部崩溃。
Apple 的驱动程序 w.r.t 中似乎存在一个重大错误。多线程访问同时遵循 Apple 关于多线程访问的说明。或者......我在文档中遗漏了一些东西,即使我已经阅读过,请重新阅读它们多次:(。
我非常乐意使用 NSOperations 或 GCD(无论如何,它们的实现方式都是一样的),但我都无法工作。
这是我知道/尝试过的:
- 全部在主线程 = 工作正常:
- 设置 GL,渲染单个三角形,加载纹理,加载几何体,渲染完整场景
- GCD = 后台 GCD “完成”后立即硬崩溃
- 在主线程上设置 GL,渲染单个三角形
- dispatch_async() 创建新的 EAGLContext、加载纹理、几何体
- 在主线程上渲染
- NSOperationQueue = 后台 GCD “完成”后立即崩溃
- 在主线程上设置 GL,渲染单个三角形,创建新的 NSOperationQueue
- addOperationWithBlock:创建新的 EAGLContext、加载纹理、几何体
- 在主线程上渲染
附加说明/Apple 指示我们做的事情:
- 已检查:我通过共享 ShareGroup 属性将新的 EAGLContext 连接到旧的
- 已检查:我在加载纹理 + 几何图形后立即明确尝试 glFlush()(两种方式均无效)
- 检查:我尝试重新使用原始线程的 EAGLContext(坏主意!) - 不同的崩溃,这并不奇怪,因为 Apple 说这是未定义的并且会崩溃
【问题讨论】:
-
如果您有可重现的错误,请通过 Apple 将其记录在:bugreporter.apple.com
-
我用 Apple 记录的最后一个 OpenGL 错误被接受了 - 然后我得到了一位 Apple 工程师的抱怨,他同意它被破坏但不想修复它。对我没有帮助:(。另外:让我对提交更多错误(并受到更多滥用)非常不感兴趣
-
很抱歉听到这个消息;听起来最不专业。但无论如何请记录下来,最终会有一个更称职的工程师出现(可能已经这样做了)并且它会被修复。
标签: ios opengl-es grand-central-dispatch