我所遭遇过的游戏中间件---nvDXTLib
我所遭遇过的游戏中间件---nvDXTLib
nvDXTLib是Nvidia提供的一套用于DXT纹理压缩SDK.接口十分简洁,就是提供了几个纹理压缩的函数,其中我使用最多的函数是:
DXTLIB_API NV_ERROR_CODE nvDXTcompress(
const unsigned char * srcImage,
size_t width,
size_t height,
size_t byte_pitch,
nvPixelOrder pixelOrder,
nvCompressionOptions * options,
DXTWriteCallback fileWriteRoutine, // call to .dds write routine
const RECT * rect = );
其含义是输入一套未压缩的纹理图像数据,在回调函数DXTWriteCallback中会输出压缩后的图像数据.pixelOrder为像素格式,byte_pitch这个东西我始终不太明白它存在的意义,它是图像中每行数据的内存大小,也就等于图像的宽度width乘以每个像素的大小,即byte_pitch == width * sizeof(pixel).除非有byte_pitch != width * sizeof(pixel)的可能,否则没有必要再传个byte_pitch进去,而实际上我下过断点,从没碰到过不相等的情况.
nvDXTLib最大的特点是线程安全,这也是我使用它的理由.否则Direct3D本来就有DXT纹理生成的方法,没必要再搞另一套压缩库.其算法压缩效率不算太高,之前测试过,但具体的性能数值已经不见了,记得大概512*512的图像压缩时间为3秒左右,1024*1024的图像压缩时间为15秒左右,2048*2048的约为1分钟.这个时间是异步处理下的时间,同步处理下的时间没有测.而且我也不记得这是在DEBUG下做的测试还是在RELEASE下做的测试.好在是异步处理,所以压缩时间长点也能接收.在游戏中的逻辑是,混合生成一张纹理,将其提交压缩任务.在压缩完成之前,使用未压缩的纹理进行渲染,当压缩完成后,使用压缩后的纹理渲染,并释放未压缩的纹理.
前几天碰到一个崩溃的问题,头疼了很久,调用nvDXTcompress时崩溃了,这套代码我已经写了很久了,突然莫名其妙的崩了,而且是小概率的难以重现的崩溃.查这种崩溃最头疼,这也是使用中间件的一个弊端,崩溃后无法跟入它的代码中,不知道崩在何处,有种束手无策的感觉.最后通过打LOG的方式发现,崩溃时正在压缩的纹理是2048*2048大小,应该是nvDXTcompress中申请了一块比较大的内存失败了导致的.
我没有找到nvDXTLib的源码,应该是它没有开源.而且这套库已经成为Nvidia历史,Nvidia现在有另一套纹理处理的SDK是nvidia-texture-tools(NVTT),开源的,比nvDXTLib要强大很多.我想以后再有纹理压缩的需求,我会用NVTT.多提一句:nvDXTLib没有获得压缩后数据大小的方法,所以在为输出数据申请内存时,不好确定,我使用的办法是按输入数据大小的一半申请输出数据内存.NVTT提供了一个接口是Compressor::estimateSize(),但estimate是估算的意思,这也不太好确定,希望其返回值永远比实际值大,否则没办法使用它.
nvDXTLib的下载地址:
https://developer.nvidia.com/sites/default/files/akamai/tools/files/DDS_Utilities_8.31.1127.1645.exe
NVTT的下载地址:
http://code.google.com/p/nvidia-texture-tools/
我所遭遇过的游戏中间件---nvDXTLib的更多相关文章
- 我所遭遇过的游戏中间件---SpeedTree
我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...
- 我所遭遇过的游戏中间件---HumanIK
我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...
- 我所遭遇过的游戏中间件--Kynapse
我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...
- 我所遭遇过的游戏中间件--Scaleform
我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...
- 我所遭遇过的游戏中间件---Redux
我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...
- 我所遭遇过的游戏中间件--Apex
我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...
- 我所遭遇过的游戏中间件--PhysX
我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...
- 我所遭遇过的游戏中间件--Havok
我所遭遇过的游戏中间件--Havok Havok是我接触的第一款游戏中间件,那是在五,六年前,我刚刚毕业,对游戏开发还是个菜鸟.我记得先是对游戏场景中的地形和其他静态物体生成刚体,然后做角色的Ragd ...
- 我所遭遇过的游戏中间件--FlashOcx
使用Flash做游戏界面的另一种方式是通过Abode提供flash.ocx处理Flash界面.将Flash图像通过GDI绘制出来后,再将图像数据拷贝到一个D3D的纹理结构中,最后由引擎的D3D接口进行 ...
随机推荐
- Java 中线程安全问题
不好意思,一个国庆假期给我放的都不知道东西南北了,放松,很放松,差一点就弃更了,感谢那些催更的小伙伴们! 虽然没有更新,但是日常的学习还是有的,以后我尽量给大家分享一些通用知识,非技术. 但是本期还是 ...
- [ 转载 ] Java基础14--创建线程的两个方法
http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类 ...
- [BZOJ4570][SCOI2016]妖怪(凸包)
两种做法,前一种会TLE. 第一种是高一数学题做法,设一个妖怪的atk和dnf分别为x和y,则它在(a,b)环境下的战斗力为x+y/a*b+y+x/a*b. 设t为b/a,则战斗力即$f(x,y,t) ...
- hdu 4549 矩阵快速幂
题意: M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F ...
- bzoj 4322 东西分配问题
问题:有n个东西,分给m个人,对于每个东西,每个人有喜欢与不喜欢两种态度:like[i][j],如果喜欢,那么他得到该东西时增加的喜悦度为k,否则为1,问是否存在一种分法,使得每个人都达到该人的最低喜 ...
- hdu 4442 Physical Examination 贪心排序
Physical Examination Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 原生+H5开发之:Android webview配置
在上一篇文章Android 原生开发.H5.React-Native开发特点,我们可以了解到三种Android开发方式的区别和优缺点.[Android开发:原生+H5]系列的文章,将主要讲解Andro ...
- Git_创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- python类型比较的3种方式(转)
通过types模块的类成员来判断,其实所有python中的类型都是这个types模块中类型的实例. import types type(x) is types.IntType # 判断是否int 类型 ...
- POJ 1330 Nearest Common Ancestors (LCA,dfs+ST在线算法)
Nearest Common Ancestors Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14902 Accept ...