游戏编程学习笔记(2)

经过了1个月左右的制作2D游戏引擎的尝试,我似乎陷入了某些瓶颈. 渲染速度始终不能达到理想的状态.

 

这个期间对引擎的结构进行了数次的改变,引擎的结构也从最初的那种非常naive的想法渐渐的有了一点头绪. 渐渐的确立了一些关于2D引擎的概念.

 

做这个引擎之出,我对direct draw的硬件加速功能报有了太大的期望,以为包括alpha融合,旋转等都会被硬件支持. 但是知道使用时才发现,根本不是这么回事. 目前公司机子上的GeForce 7300GT对32位色的这两点都不支持. 不过还好对缩放还是支持的. 没有别的办法,我只好用软件处理的方法进行alpha融合和旋转,  但这样以来, 渲染速度一降再降. 在网上搜索了很多进行优化的方法, 但是发现目前主流的引擎都是RGB565色的, 可以适用于这种色深的方法对于32位色并不一定好用. 唯一感觉能够拯救我的方法目前感觉只有使用MMX指令, 但是还是有问题, 从direct surface中lock出来的表面的存储结构导致访存变的好复杂...direct真是的,非要每行多出来那么多空间(ddsd.lPitch - ddsd.dwWidth)...而且使用MMX指令的同时不能使用浮点运算指令,切换时需要EMMS指令(切换的太频繁估计比不用SIMD还慢...).与此同时,还有在使用alpha融合时的拉伸问题.这个也挺慢的. 由于如果有N个相同文件的图片对象,他们都只共用同一张表面, 这使得我不能在源表面上面改(下一个版本,这个结构得改下...我想用同一个表面副本,然后每个对象在对其进行复制自己的一分,占内存就占吧,为了速度...)

 

下一步,我要先找几个2D引擎看下,吸取一下优点

你可能感兴趣的:(游戏编程学习笔记(2))