这是个老问题,但是公司不同的同学先后被坑,所以必须记录一笔。这样可以增加事后被 google 到的概率,千万别来第三次了。
我原本以为 opengl 在 bind VBO 后,如果修改了 VBO 的数据,是不需要重新 bind VBO 对象的。所以早先的 ejoy2d 在这里的处理就做了一点优化,并没有重复 bind ,可以减少一些 API 调用。
大约在 2015 年 6 月左右,由于需要跟进 mac osx 的系统更新,ejoy2d 增加了对 VAO 的支持。我再修改相关实现的时候发现在某些设备上,出现了 bug 。
当时猜想可能是新的手机的驱动做了一些过去没有做的奇怪的优化。我没有太多确认 opengl 是否对此有要求,不知道是否是驱动的 bug ,不过还是做了一些修改。
在 这个 patch 中,我在更新 VBO 的数据后,设置了脏标记,最后提交时会重新 bind VBO 。
当时并没有刻意做为一个独立 commit 提交,所以被同事疏忽了。
前不久,我们的 心动庄园 在新版锤子手机上出现花屏,同事追查过原因,发现只需要更新 ejoy2d 就解决了。定位了一下原因,就是上面提到的 patch 解决的。
前几天,另一个同事自己用 ejoy2d 开发的小游戏 爆裂方块 在 360 平台审核时被报告有显示 bug ,又查了好久,今天终于定位到是同一问题。
在同样的问题上浪费时间真是不划算。
所以:
- 要勤作记录并让 google 可以检索到。
- 开源项目要记得保持同步。