我正在android上尝试一些opengl,我以前没有任何3d编程经验。很明显我在程序中犯了不少错误。
当我遇到一个问题并发现glGetError
产生了一个错误代码时,我只是在每次调用绘图代码中的opengl命令之后添加对glGetError
的调用。虽然这样做了,我发现了我的错误,我的绘图代码现在是两倍大,在我看来更难阅读。
有没有办法摆脱所有这些对glGetError
的显式调用并自动调用它?最好,我的应用程序应该中止,并显示如果发生opengl错误,哪个命令应该负责。
最佳答案
从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
在日志里。在本例中,我向
glEnableClientState()
传递了错误的enum/int来触发错误。请注意,启用此选项将“消耗”此错误,并且进一步的glGetError()
检查将不再报告此错误。相反,现在可以节省在代码中输入glGetError()
调用的时间,只需grep“glgeterror:”的日志输出。