系统描述:
框架版本:cocos2d-x 2.1.0
系统版本:Windows XP
编辑平台:Visual Studio 2008
cpu:intel i3 2320
显卡:HD graphic 2000
显卡驱动版本:暂时记不清楚
问题描述:
去年年前,Boss 将公司的旧框架的游戏移植到cocos2d-x上以后,就交给我和同事,让我们对cocos2d-x进行熟悉。在最初始的版本上,在新框架实现的游戏,在同事的机器上能够按照Boss的预期运行,可是到了我的机器上,部分精灵,随机性显示为整个黑块。由于当时我手头上,尚有其他工作没有完成,就没有进一步去解决,Boss给出的初步建议,让我更新一下显卡驱动。
今天,Boss 让我熟悉新框架。将同事修改的最新版本check out。编译运行后,在同事的机器上能够完美运行的程序,到了我的机器上,部分精灵仍然不能正常显示,依旧为和精灵加载的纹理同样大小的黑块。
第一阶段:我第一反应,就是清理解决方案,全部重新编译。如此反复几次,总结出规律,黑块基本出现在最后加载资源上,而且数量上也是时多时少。在百思不得其解的情况下,我去群里面问,结果可能大家都忙吧,没有人理会我。好吧,我只能百度。关键词:cocos2d-x 精灵 黑块。基本上没有看到我想看到的东西。好吧,我换google,也没有搜到我想要的东西。这时候,群里面有人找我私聊,最后发现也是一个新手,给的建议和我想的基本一样:找百度。
第二阶段:继续编译运行。不小心发现,在调试运行输出窗口有信息输出:type color 6占大部分,有零散 openGL error 0x0505的输出信息。我稍微数了下,数量上和出现的黑块,基本上差不多。我立刻定位输出的信息来源,是opengL 的调试信息输出。我没有继续思考下去,然后就去找google。在变换了几次关键词,查到的有用信息仍然很少,基本指向,可能是显卡驱动对opengL支持不好。我重新装了显示驱动,结果,现象依旧。我迷茫了。
第二阶段:继续编译运行。不小心发现,在调试运行输出窗口有信息输出:type color 6占大部分,有零散 openGL error 0x0505的输出信息。我稍微数了下,数量上和出现的黑块,基本上差不多。我立刻定位输出的信息来源,是opengL 的调试信息输出。我没有继续思考下去,然后就去找google。在变换了几次关键词,查到的有用信息仍然很少,基本指向,可能是显卡驱动对opengL支持不好。我重新装了显示驱动,结果,现象依旧。我迷茫了。
第三阶段:在毫无头绪几个钟以后,我终于想到,在代码去去确认错误代码的含义:OUT_OF_MEMERY。内存溢出,我马上把我和我同事的机器进行了对比。我们的机器都是集成显卡,同事机器的内存条只有2G,而我的有4G。这显然不是主存的原因,肯定是显卡共享内存分配不足照成的。我立刻查看显卡共享的内存的大小64-256M。在没有运行游戏时,共享显存使用量为48M。我将共享内存设大以后,黑块明显减少。反而是bios设置,弄了很久,才把共享内存设置到最大1024,黑块消失,调试警告也消失。
反思:
发现问题后,没有认真思考问题,将问题抽象出来,就急于找解决方法,这无疑是本末倒置的做法。
关于代码BUG调试,第一步是要还原错误,第二步分析错误,提出假设,再次重现错误。