1

我有一个渲染 3D 模型的 OpenGL 视图。它是对苹果 EAGLView 的基本修改。此视图被添加到控制器的 .view 中并使用 presentModalViewController: 显示。在用户选择显示视图之前,我想在应用程序启动时在后台线程中完成所有模型加载和 OpenGL 状态配置。这可能吗?我可以加载纹理、设置照明,并且通常只是准备好在后台线程中渲染所有内容吗?我担心的是,当我在后台设置渲染器时,主应用程序的 Cocoa 触摸部分会操纵 OpenGL 状态。当然,控制器将从主线程显示。对 OpenGl-ES 的这种理解程度不是我经常处理的事情,所以如果我的问题有任何奇怪之处,请保持谦逊 :)

4

1 回答 1

1

您绝对可以在线程上进行后台加载。一些关键点: - 将 OGL 状态设置移动到后台线程可能没有太大的好处 - 在第一次抽签开始之前,您在上下文中引起的更改总量不会加起来一吨的时间。后台加载对于纹理和 VBO 以及必须首先发生的加载时间以将数据提供给 GL 非常有用。- 您需要从主线程中分离上下文并将其移动到工作线程。我们使用 pthreads 将上下文“发送”给工作线程。- 在我们的使用中,我们隐藏了 GL 视图以确保在加载状态下不需要绘制它。(坦率地说,在加载期间它可能不包含任何有用的东西。)因此,在异步加载期间,可见的 UI 都是非 GL Cocoa。

这种方法比在桌面上做的更困难:只需在两个上下文中共享对象(这样您就可以同时加载和绘制)。当我们一年多前研究这种方法时,在 IOS 上是不可能的。现在可能有,我不知道。

于 2010-11-11T20:03:58.310 回答