我所遭遇过的游戏中间件---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的更多相关文章

  1. 我所遭遇过的游戏中间件---SpeedTree

    我所遭遇过的游戏中间件---SpeedTree SpeedTree是一个专门用于渲染植被的中间件,并提供了一套完善的植物编辑工具.在它官方提供的DEMO中,你会看到高度逼真的树木和植物,在风的影响下树 ...

  2. 我所遭遇过的游戏中间件---HumanIK

    我所遭遇过的游戏中间件---HumanIK Autodesk HumanIK游戏中间件,为游戏创建更加可信.真实的角色动画.该中间件的全身逆向运动(FBIK)系统支持角色真实地与所在环境及其它角色进行 ...

  3. 我所遭遇过的游戏中间件--Kynapse

    我所遭遇过的游戏中间件--Kynapse Autodesk Kynapse游戏中间件是一款面向游戏开发.非玩家控制角色实时模拟的领先的人工智能解决方案.Kynapse具有先进的路径查找功能,比如三维路 ...

  4. 我所遭遇过的游戏中间件--Scaleform

    我所遭遇过的游戏中间件---Scaleform Scaleform帮助开发人员利用现代系统的三维硬件加速性能创建电影品质的菜单.游戏内HUD,动画纹理.迷你游戏以及移动游戏与应用.Scaleform作 ...

  5. 我所遭遇过的游戏中间件---Redux

    我所遭遇过的游戏中间件---Redux 一.关于Redux Substance Redux 是一款纹理处理软件加中间件,专门用于纹理生成和压缩.具其用户指南介绍,它能够对纹理集进行优化,可以将现有压缩 ...

  6. 我所遭遇过的游戏中间件--Apex

    我所遭遇过的游戏中间件--Apex Apex是PhysX的扩展中间件,它是在PhysX的基础上封装了一层.用于实现布料,粒子,破碎这三种物理效果.我只研究其布料处理.使用Apex做物理最大的好处是:它 ...

  7. 我所遭遇过的游戏中间件--PhysX

    我所遭遇过的游戏中间件--PhysX PhysX现在是Nvidia的物理中间件.其特点是简练且功能强大.当我最初拿到PHYSX的SDK时,就发现这个物理中间件比Havok要小很多,但该有的功能都有,甚 ...

  8. 我所遭遇过的游戏中间件--Havok

    我所遭遇过的游戏中间件--Havok Havok是我接触的第一款游戏中间件,那是在五,六年前,我刚刚毕业,对游戏开发还是个菜鸟.我记得先是对游戏场景中的地形和其他静态物体生成刚体,然后做角色的Ragd ...

  9. 我所遭遇过的游戏中间件--FlashOcx

    使用Flash做游戏界面的另一种方式是通过Abode提供flash.ocx处理Flash界面.将Flash图像通过GDI绘制出来后,再将图像数据拷贝到一个D3D的纹理结构中,最后由引擎的D3D接口进行 ...

随机推荐

  1. jenkins定时构建

    打开job的配置界面,在构建触发器栏下有Poll SCM(定时检查源码变更并构建)和Build periodically(周期进行项目构建,不关心源码是否变更) 定时构建语法: * * * * *(和 ...

  2. JAVAEE——BOS物流项目02:学习计划、动态添加选项卡、ztree、项目底层代码构建

    1 学习计划 1.jQuery easyUI中动态添加选项卡 2.jquery ztree插件使用 n 下载ztree n 基于标准json数据构造ztree n 基于简单json数据构造ztree( ...

  3. liniux Crontab 的重启和设置

    重启crontab,service cron restart 05 01 * * * /usr/local/php/bin/php FILE 10,30,50 * * * * /usr/local/p ...

  4. python抓包模块

    pcapy模块 安装 yum install -y epel-release yum install -y pip gcc    gcc-c++   libpcap-devel python-deve ...

  5. luoguP4208 [JSOI2008]最小生成树计数 矩阵树定理

    题目大意: 求最小生成树的数量 曾今的我感觉这题十分的不可做 然而今天看了看,好像是个类模板的题.... 我们十分容易知道,记能出现在最小生成树中的边的集合为\(S\) 那么,只要是\(S\)中的边构 ...

  6. BZOJ 3238 [Ahoi2013]差异(后缀自动机)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3238 [题目大意] 给出一个串,设T[i]表示从第i位开始的后缀, 求sum(len( ...

  7. (Nginx和PHP下)URL重写,TP实现URL重写

    UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址. 优点 一:提高安全性,可以有效的避免一些参数名.ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话 ...

  8. Windows Phone background Audio 后台音频

    Windows Phone 后台音频的确不是什么新鲜的话题了,但发现目前在WP平台的音频播放应用多多少少会有一些瑕疵,所以在此给大家在此介绍下这个功能给有需要的朋友们. 首先介绍下我们的应用在后台播放 ...

  9. HDU 5683 zxa and xor 暴力模拟

    zxa and xor 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5683 Description zxa had a great interes ...

  10. Codeforces Round #294 (Div. 2)C - A and B and Team Training 水题

    C. A and B and Team Training time limit per test 1 second memory limit per test 256 megabytes input ...