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

前端之家收集整理的这篇文章主要介绍了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相关文章