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