该程序包含两个菜单,您必须按顺序通过它们才能到达使用OpenGL的屏幕。一旦您使用了应用程序的OpenGL部分并返回到前一个菜单,然后再次尝试返回到OpenGL部分,我会得到一个打印输出,显示GL ERROR:0x0501。我已经缩小了问题范围,发现它是由我的效果的prepareToDraw方法引起的。另一个奇怪的部分是,如果我返回并再次前进,OpenGL就会再次工作,并且可以重复多次,每次进入OpenGL部分时都会工作和中断。
我一直在寻找类似于我的问题的解决方案,但每次都与加载不是2的幂纹理有关,这对我没有帮助,因为我甚至还没有使用纹理,只是彩色顶点。
我已经pastebin'd了我的两个代码文件,其中问题应该存在。
Dice.m: http://pastebin.com/ze1DEEzs 在draw方法中,您会看到我的输出缩小了问题所在的范围,即prepareToDraw方法。(第308行)
RollViewController.m: http://pastebin.com/VycwAh3R 这个文件是我设置效果和上下文等的地方,所以我一定在这里做错了什么,导致每次运行程序的OpenGL部分时prepareToDraw方法出现问题。我有一种感觉,这与没有释放某种与上下文和效果相关的资源有关,但我找不到关于删除上下文和效果的任何信息(可能是因为您不需要,但我不确定)。
我希望有人遇到过同样的问题并能回答我的问题,也希望这不只是一个愚蠢的错误,因为我已经试图解决这个问题有一段时间了 :)
谢谢
[EAGLContext setCurrentContext:[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2]]
一次,然后在此之后每次使用[EAGLContext setCurrentContext:[EAGLContext currentContext]]
。 - Fonix