android – 在每个命令之后调用OpenGL比调用glGetError有更好的方法吗?

我正在 Android上尝试一些OpenGL,而且我之前没有任何3D编程经验.显然我在我的程序中犯了很多错误.

当我遇到问题并发现glGetError产生了错误代码时,我在绘图代码中每次调用OpenGL命令后都添加了对glGetError的调用.虽然这很有效,但我发现了我的错误,我的绘图代码现在是我认为的两倍大,更难阅读.

有没有办法摆脱所有这些显式调用glGetError并自动调用它?优选地,如果发生OpenGL错误,我的app应该只是中止错误,指示哪个命令负责.

解决方法

从版本4.2开始,Android在手机的开发者选项中提供了一个名为“启用OpenGL跟踪”的选项.如果将其设置为“在glGetError上调用堆栈”,您将获得类似的输出
07-15 15:44:43.045: D/libEGL(14251): [glEnableClientState] 0x500
07-15 15:44:43.068: D/CallStack(14251): glGetError:glEnableClientState#00  pc 00019388  /system/lib/libEGL.so
07-15 15:44:43.076: D/CallStack(14251): glGetError:glEnableClientState#01  pc 0001e290  /system/lib/libdvm.so (dvmPlatformInvoke+112)
07-15 15:44:43.076: D/CallStack(14251): glGetError:glEnableClientState#02  pc 0004d410  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*,JValue*,Method const*,Thread*)+395)
07-15 15:44:43.076: D/CallStack(14251): glGetError:glEnableClientState#03  pc 000276e4  /system/lib/libdvm.so

在日志中.在这种情况下,我将错误的enum / int传递给glEnableClientState()以触发错误.请注意,启用此选项将“消耗”该错误,并且进一步的glGetError()检查将不再报告此错误.相反,您现在可以节省将glGetError()调用放入代码中的时间,并且只需grep“glGetError:”的日志输出.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...