« 资源包的设计 | 返回首页 | ejoy2d sprite pack 的空间优化 »

opengl bug 一则

这是个老问题,但是公司不同的同学先后被坑,所以必须记录一笔。这样可以增加事后被 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 ,又查了好久,今天终于定位到是同一问题。

在同样的问题上浪费时间真是不划算。

所以:

  1. 要勤作记录并让 google 可以检索到。

  2. 开源项目要记得保持同步。

Comments

从网易的NeoX殷勤的配置文件中看到有相关的配置,对Adreno (200,202, 203,220,225),应该是需要reset的。
opengl 是否对次有要求 -> opengl 是否对此有要求
要勤作记录并让 google 可以检索到。
你可以打日志。是有api可以取到当前的vbo的,你得看看画的时候,当前的vbo对不对。
云风老师,你可以把bug的症状表现关键字放到标题,更容易被人看到。

Post a comment

非这个主题相关的留言请到:留言本