wp8下压缩纹理的使用(dds)
转自 http://blog.csdn.net/langresser_king/article/details/12753549
个人认为,既然手机设备支持wp8支持dx11,那么dds的压缩纹理必然是被支持的。不过依然不保证完全如此。希望看此文章的同仁留意。
微软wp系统在内存管理上有一个不同于ios和android的地方,那就是给程序预先分配的内存是有限的。正常情况是150mb,通过设置一些标志可以 允许180mb或者300mb。程序分配的内存超过限额就会分配失败抛出异常,即便这个时候手机剩余内存还剩七八百兆。所以买低端手机的劣势就是很多游戏 不是没有,而是你看不到,因为那些游戏因为安全起见,申请了300mb的内存,那么只有512mb内存的手机可能就看不到这个应用了,即便它可以在这个手 机上跑起来。
反过来,对游戏开发而言,内存控制就变得更加重要了。 不过这里还是要吐槽一下,wp8使用native c++进行开发的话,没有任何途径可以获取内存使用情况进行分析。一没有工具,二没有系统api。 只能靠程序员给力些了。
比如我的卡牌游戏,一开始分配内存可能达到200mb,那么就经常性的崩溃。后面使用dds的压缩纹理后,就没有出现崩溃情况了。理论上说dds跟 pvrtc4一样都是4个字节表示一个像素,所以使用dds的游戏在wp8上面的运行内存情况应该跟使用pvrtc4在ios上面运行一样。
首先说转换工具,我找了半天终于找到个靠谱的工具。Nvida Texture Tools,这个有工具有代码。不过默认情况下程序不识别png jpg图片,后面我重新用源代码编译了一份。
之所以要使用这个工具而不是市面上大多数图片转换工具是因为dds图片的压缩纹理格式分很多种,常见的有dxt1 dxt3 dxt5,常用的是dxt3,dxt1色彩不足,而dxt5不是所有设备都支持,比如我的lumia920,使用dx api检测时就不支持dxt5。
较新的cocos2d-x代码里面已经包含了s3tc压缩纹理的支持。dds的压缩纹理格式就是s3tc。读取纹理可以直接使用,而不需要特别写初始化代码了(比如 CreateDDSTextureFromFile就没有必要了)