GLKBaseEffect prepareToDraw GL ERROR:0x0501

时间:2012-05-26 15:35:23

标签: objective-c ios opengl-es glkit

所以我一直在用一些OpenglES做一些iphone开发,但是当我在我的效果上调用prepareToDraw时,我得到一个相当奇怪的错误。简而言之,我的程序模拟骰子滚动(试图学习objective-c和opengl)。该程序在大多数情况下工作正常,我可以使用我编写的应用程序所做的一切(有物理上的错误,但以后会修复)。在使用包含OpenGL的部件之后,问题出现了。

该程序包含2个菜单,您必须通过该菜单才能到达使用OpenGL的屏幕,一旦您使用了应用程序OpenGL部分并返回上一个菜单,然后再次尝试返回OpenGL部分,我打印出GL ERROR:0x0501。我把它缩小到由我的效果中的prepareToDraw方法引起的。关于它的另一个奇怪的部分是,如果我回去,然后再向前,OpenGL再次工作,并且可以一次又一次地重复,以使其工作并且每隔一次你进入OpenGL部分就会破坏。

我一直在寻找与我类似的问题,但每次它都与加载不是两种力量纹理的纹理有关,这对我没有帮助,因为我甚至还没有使用纹理,只是彩色顶点。

我已经将我的两个代码文件粘贴到了问题所在的位置

Dice.m:http://pastebin.com/ze1DEEzs 在draw方法中,你会看到我的打印输出缩小了问题所在,这就是prepareToDraw方法。 (第308行)

RollViewController.m:http://pastebin.com/VycwAh3R 这个文件是我设置效果和上下文等的地方,所以我必须在这里做错了导致prepareToDraw方法每次第二次搞乱我运行程序的OpenGL部分。我有一种感觉它与不放弃某种资源来处理上下文和效果有关,但我无法找到任何关于删除上下文和效果的东西(可能因为你不需要但我不确定)。< / p>

我希望有人遇到同样的问题,可以回答我的问题,我希望它不仅仅是一个愚蠢的错误,因为我一直试图解决这个问题:)

感谢

2 个答案:

答案 0 :(得分:10)

经过多次痛苦和痛苦,我终于找到了解决问题的方法。我不完全确定为什么这是一个问题,但在OpenGL部分(也就是RollViewController.m)中创建上下文不是这样做的方法。相反,您应该在程序的整个生命周期中创建一次,并将glkview的当前上下文设置为您所创建的上下文。也许有人可以告诉我为什么重新创建上下文是一个坏主意。

在我的代码中,我有一个在视图和菜单之间传递的配置文件对象,以便它们可以与相同的数据进行通信,因此我只是在配置文件对象中定义了一个公共上下文,以便所有内容都可以访问上下文而不是创建自己的(和破坏)。

答案 1 :(得分:0)

错误似乎很普遍,可能是因为不同的问题。我通过不使用mipmap来避免它(现在)。我评论了以下代码,并且不再有错误。

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); glGenerateMipmap(GL_TEXTURE_2D)