我有一个渲染3D模型的OpenGL视图。它是Apples EAGLView的基本修改。此视图将添加到控制器的.view中,并与presentModalViewController一起显示:。我想在用户选择显示视图之前在应用程序启动时在后台线程中执行所有模型加载和OpenGL状态配置。这可能吗?我可以加载纹理,设置光照,通常只是准备好在后台线程中渲染一切吗?我担心,当我在后台设置我的渲染器时,主要应用程序的Cocoa触摸部分将操纵OpenGL状态。当然,控制器将从主线程显示。对OpenGl-ES的这种理解水平并不是我经常处理的事情,所以如果我的问题在任何方面都很奇怪,那么请你是异教徒:)
答案 0 :(得分:1)
你绝对可以在线程上进行后台加载。一些关键点: - 将OGL状态设置移动到后台线程可能没什么好处 - 在第一次抽奖开始之前你在上下文中引起的总变化量不会增加很多时间。背景加载对于纹理和VBO非常有用,以及为了将数据提供给GL而必须首先发生的加载时间。 - 您需要从主线程中分离上下文并将其移动到工作线程。我们使用pthreads将上下文“发送”给worker。 - 在我们的使用中,我们隐藏GL视图以确保在加载状态下不需要绘制它。 (坦率地说,在加载过程中它可能不包含任何有用的东西。)因此在异步加载期间,可见的UI都是非GL Cocoa。
这种方法比你在桌面上做的更难:只需在两个上下文中共享对象(这样你就可以同时加载和绘图)。当我们在一年多前看过这种方法时,在内部监督办公室是不可能的;现在可能有可能,我不知道。