我正在尝试使用 OpenGLES 制作简单的游戏。我有两个 EAGLViews(菜单和游戏视图)。每个视图都有自己的 viewController。视图的初始化由 viewController 的 initWithNIBName 方法完成。而当我想显示视图时,我只需使用主窗口的 addSubview 方法。游戏视图仅在启动时初始化一次。仅在需要时才初始化菜单视图。问题是,当我从游戏视图转到菜单然后返回,然后我重新绘制游戏视图时,出现了问题。(我在绘制之前在 drawView 方法中设置了 EAGLContext,所以上下文可能是正确的)。不知道问题出在哪里?或者如果整个切换管理错误,请给我和建议。感谢您的回复。
Jenicek
问问题
3807 次
1 回答
1
我猜你遇到了纹理显示不正确的问题?
我不知道 OpenGL 背后的真实情况,但这是我的假设:每次你回到 EAGLView,EAGLView 的 EAGLContext 都会改变。(如果您一直从 OpenGLES 模板复制和粘贴)纹理只能在上下文处于正确状态后加载,否则您无法加载任何纹理。现在,通过离开 EAGLView 并返回,您正在从 initWithCoder:(NSCoder*)coder 实例化一个新的 EAGLContext:
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context]) {
[self release];
return nil;
}
那么我们如何才能保留这种上下文呢?我使它成为全球性的。就那么简单。当 EAGLView 再次被实例化时,让它检查“全局”EAGLContext 是否为 nil。如果它是 nil,就实例化它,否则什么也不做。除非你想退出你的程序,否则永远不要释放或释放这个全局 EAGLContext。
这对我有用,但同样,我上面的假设可能不正确。如果有人知道真实的事情,请教我。我也虚心地需要指导。我想真正知道为什么会发生这种情况以及为什么我们也必须这样做。
顺便说一句,这能回答你的问题吗,Jenicek?
于 2009-08-05T05:32:54.953 回答