微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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:”的日志输出.

原文地址:https://www.jb51.cc/android/316222.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐