objective-c - GLKBaseEffect prepareToDraw GL 错误 : 0x0501

标签 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 部分时每 2 次搞砸。我有一种感觉,这与不放弃某种资源来处理上下文和效果有关,但我找不到任何关于删除上下文和效果的信息(可能是因为你不需要,但我不确定)。

我希望有人遇到了同样的问题并且可以回答我的问题,我希望这不仅仅是一个愚蠢的错误,因为我已经尝试解决这个问题一段时间了:)

谢谢

最佳答案

在经历了很多痛苦之后,我终于找到了解决问题的办法。我不确定为什么这是个问题,但在 OpenGL 部分(又名 RollViewController.m)中创建上下文并不是解决问题的方法。相反,您应该在程序的整个生命周期中创建一次,并将 glkview 的当前上下文设置为您创建的上下文。也许有人可以启发我为什么重新创建上下文不是一个好主意。

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

关于objective-c - GLKBaseEffect prepareToDraw GL 错误 : 0x0501,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10767554/

相关文章:

ios - 如何判断 WKWebView 是否正在播放音频?

ios - Objective-C iOS 中的谷歌地图集成问题(_ OBJC _ CLASS _ $ _ GMSPlacesClient,引用自 :)

ios - 在滚动 UITableView 之前,UITableCell 中的 UILabel 的大小不正确

java - 如何在 LibGDX 中暂停 Actor 的 Action ?

java - 着色器/矩阵问题 - 看不到对象

objective-c - 如何设置BarChartView的barColor?

iphone - 在 Singleton 中设置 NSMutableDictionary 条目?

objective-c - 获取 UIWebView 的完整内容,包括 !doctype 和 html 标签

android - 为 Android 和 iOS 创建 3D 图像 slider

iphone - 使用 CGBitmapContextCreate 创建的图像作为 opengl 纹理