昨天遇到的诡异BUG
前天终于找到了某无法稳定重现的帧率严重下降的BUG,是由于一个变量没有初始化,不由觉得人生都明朗了神马的。然后更新了一下SVN,又遇到一个无法稳定重现的诡异BUG。
在iPad上有时候启动游戏会发现场景中的静态模型的网格都发散了,而且一直在动。。。动态模型和粒子则无碍。
那网格发散的惨状颇似TBC时代我用ATI显卡玩WOW,一去外域就会有某些模型这样,有时候顶点还能突破天际,过一会儿就crash了。
又像我曾经调试布料的时候,物理参数没写好导致计算崩溃了。
好了回归正题。。。
用xcode截了两次运行结果的一帧GLES调用,并没有看出什么异常来,渲染状态、VBO都是对的,只是确实画不出正确的模型来了。
无奈只能去查SVN的log,但是忘记了我上次更新的时间。。。
回退了几个版本依旧有问题。这其中过程也曲折,不断的尝试中我发现以下几种行为可能会导致BUG:
跑大概五分钟自己的程序。 跑大概五分钟别的3D游戏,比如temple run、infinite blade、despicable me等。 跑一下QQ (我也不知道为什么但这个真的有可能会触发 = =) 关机重启
所以为了验证一个SVN版本到底会不会有BUG我要跑很多次游戏。。得到最终的结果时我已经跑了一天的游戏。
发现一两个星期前有人修改了vertex buffer及顶点池的代码,感觉可能性较高。回退到那天之前果然OK了。
为了进一步验证导致错误的SVN版本,继续二分查找似的去更新SVN,然后发现,导致错误的,是来自于我的提交。
之前一直使用的是GLES 1.1,后来我实现了GLES 2.0的版本,但还没有调通,加入了工程里,只是没有去引用它。结果还是造成了两个库的冲突。
最后知道真相的我眼泪掉下来。
之前在windows上模拟GLES时也遇到过问题,将1.1和2.0的lib同时加入到工程中会导致crash,只是没有想到,在iPad上是这样的呈现方式。
其实早该知道了,scaleform的GLES1.1与2.0版本也是通过不同的makefile不同的宏来区分的,可是就是被我忽视了。
虽然感觉蠢蠢的,但还是记录下来吧。如果能够帮助到需要的人,那就更好了~(虽然觉得可能性很小。。