是OpenGL线程安全的多个线程与不同的上下文?
我知道在线程之间共享一个上下文是个坏消息。 我知道,当主线程上的GL没有发生任何事情时,我可以安全地在辅助线程上创build和使用带有屏幕外帧缓冲区的上下文。
对于是否可以在两个不同的线程上安全地创build两个上下文(比如,一个主线程在屏幕上绘图,另一个线程在屏幕外绘制工作),我还没有find一个明确的答案,并让他们同时进行GL函数调用。
换句话说,只要上下文不同,两个线程可以“共享”C API,从而GPU? 或者,这固有的东西是不可共享的? 或者是这个实现特定的?
在iOS上特别要求OpenGL ES,但这可能是一个普遍的GL问题。
是的,你需要为每个想要使用OpenGL的线程使用一个上下文,也可以在上下文之间共享对象。 这是要走的路 :)
选项1 :如果不同时使用两个线程的上下文,则一个上下文就足够了。
选项2 :如果您需要同时使用多个线程使用OpenGL,则需要多个上下文。 然后,如果上下文共享他们的Sharegroup ,他们共享他们的OpenGL内容,如纹理。 这样你就可以加载纹理或在后台线程上执行大量的帧缓冲处理。
看看有关Sharegroups的最后一节: http : //developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithOpenGLESContexts/WorkingwithOpenGLESContexts.html
选项3 :GLKit提供了一些内置的后台处理,例如通过GLKTextureLoader
s - textureWithContentsOfFile
asynchronous纹理加载。 我不知道所有的选项,但它绝对简化了一些asynchronousOpenGL的用例。
- select器来获取indexPath UICollectionView Swift 3.0
- iOS相机:手动曝光持续时间但自动ISO?
- Swift:不能以编程方式configuration自定义表格单元格? 初始化不被调用?
- “无法分配”错误迭代结构数组
- 框架未找到MicrosoftBandKit_iOS
- Swift – 如何将标签栏和导航栏添加到单个视图控制器?
- “反应本机pushnotificationIOS”scheduleLocalNotification“发射对象格式
- SpriteKit:使用SKTextureAtlas会导致不正确的Physics Body
- 如何将微信API添加到Swift项目?