我正在尝试多线程化我的iOS应用程序,以使其更具响应性。我想要一个线程来处理所有OpenGL的东西,比如渲染和加载缓冲区对象和纹理等。但是我很难实现这个。
我知道一个线程应该拥有它自己的上下文,以便调用gl函数而不会冒未定义行为的风险。所以在我的应用程序中,我在OpenGL专用线程中创建一个新的上下文,然后将其设置为当前上下文。然后我在该线程上进行所有加载和渲染。
我对此感到困惑的是GLKView上下文。我该怎么做呢?我是否将其设置为我在新线程中创建的上下文?或者我是否需要在主线程上创建另一个上下文并将其分配给它?然后让这两个上下文共享一个共享组?
答案 0 :(得分:0)
这应该有效:
init(api:)
创建背景上下文,或使用init(api:shareGroup:)
并将nil
传递给第二个参数。shareGroup
。shareGroup
作为初始化程序init(api:shareGroup:)
的第二个参数。另外,请记住上下文之间的you can not share Vertex Array Objects。我曾经使用第二个上下文实现了异步后台加载,但是必须在后台初始化纹理,VBO和IBO,然后在主线程上使用rendez-vouz(同步)(例如,使用GCD)来组装VAO。真正的痛苦......