我想*的.dds文件的意思是快速加载?(I thought *.DDS files were mea

2019-08-16 15:20发布

好了,我试图权衡亲的和使用各种不同的纹理压缩技术的反对的。 我花我的时间99.999%的编码使用DirectX的Windows机器2D精灵游戏。

到目前为止,我已经看过质感包装(SpriteSheets)与α-修剪和这似乎是一个体面的方式来获得更多的性能。 现在我开始看它们存储在纹理格式; 目前一切都被保存为* .PNGs。

我听说*的.dds文件是好,DXT5(/ 3/1根据任务)压缩为结构保持在VRAM压缩使用时尤为突出? 也有人说,因为他们已经DirectDraw的表面,他们加载了,太多了更快。

所以,我创建了一个应用程序来测试这一点; 我打电话低于20倍线,释放每次呼叫的质感。

    for (int i = 0; i < 20; i++)
 {
  if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"Test.dds", &g_pTexture ) ) )
  {
   return E_FAIL;
  }

  g_pTexture->Release();
  g_pTexture = NULL;
 }

现在,如果我尝试这个具有DXT5纹理,它需要5倍的时间比用一个简单的*。PNG加载完成。 我听说,如果不产生的贴图可以走慢,所以我仔细检查了这一点。 然后,我改变,我用生成*的.dds文件的程序,切换到NVIDIA自身的nvcompress.exe,但没有它有任何影响。

编辑:我忘了提的是,本文件(包括*。PNG和*的.dds)都是相同的图像,只是以不同格式保存。 (相同尺寸,阿尔法的金额,应有尽有!)

编辑2:当使用它加载在几乎快2.5倍以下参数,消耗少了很多VRAM!

 D3DXCreateTextureFromFileEx( g_pd3dDevice, L"Test.dds", D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_FROM_FILE, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, NULL, NULL, &g_pTexture )

不过,我现在失去了我所有的透明度纹理,我已经看过了DXT5纹理和它在Paint.NET和DirectX DDS浏览器看起来不错。 然而,在所有的透明度加载时变为纯黑色。 colorkey的问题?

编辑3:忽略最后一点,我是白痴,在我的“简单的例子”急速我忘了,使阿尔法混合的D3DXSprite->开始()。 卫生署!

Answer 1:

你需要的是你的文件存储在磁盘上的格式和纹理在显存最终使用的格式进行区分。 DXT压缩纹理提供视频内存,但其他压缩技术像PNG或JPEG压缩内存使用和质量之间的良好平衡通常会导致较小的文件和/或磁盘上更好的质量。

DDS文件有他们直接支持DXT格式,并以同样的方式被布置在磁盘的DirectX预计该数据在内存中排列所以它们被加载到它们转换成一种格式后,需要最少的CPU时间的优势硬件可以使用。 它们还支持预生成的纹理贴图链,其格式如PNG不支持。 压缩的图像格式DXT是一个耗时的过程,所以你一般要尽可能避免这样做负载相当的时间。

与前期的mipmap一个DDS文件是大小相同,并使用相同的格式显存质感您打算创建它将使用任何标准格式的最小CPU时间。 你需要确保你告诉D3DX不执行任何缩放,过滤,格式转换或纹理贴图生成,以保证虽然。 D3DXCreateTextureFromFileEx允许你指定防止任何内部转换发生(标志D3DX_DEFAULT_NONPOW2图像的宽度和高度,如果你的硬件支持两个纹理,非电力D3DFMT_FROM_FILE防止纹理贴图生成或格式转换, D3DX_FILTER_NONE防止任何过滤或缩放)。

CPU时间,虽然只是故事的一半。 这些天CPU是相当快和硬盘驱动器都比较缓慢,有时如果您加载像PNG或JPG较小的压缩文件格式,然后做大量的CPU工作,将其转化比,如果你加载一个较大的文件,你的总加载时间可以更短像DDS,只是做的memcpy到显存。 给出良好结果的一个常用方法是压缩DDS文件和磁盘和CPU最低成本进行格式转换快装解压缩。

压缩格式,如PNG和JPG将更有效地压缩一些图像比其他人。 DDS是固定的压缩比 - 给定的图像的分辨率和格式将总是压缩到相同的大小(这就是为什么它更适合于在硬件解压)。 如果您使用的是测试简单的非代表图像(例如,均匀的颜色或简单的图案),那么你的PNG文件很可能是非常小的,所以会从磁盘加载速度比一般的比赛将图像。



Answer 2:

比较加载标准PNG,然后将其压缩到它需要加载DDS文件的时间。

不过我不明白为什么一个PNG将加载任何速度比压缩相同的纹理DXT5。 对于一个这将是一个公平的有点小,所以应该加载形式的磁盘速度更快! 这是DXT5纹理一样的质感PNG? 即它们是相同的大小?

您是否尝试过与D3DXCreateTextureFromFileEx玩? 你有过正在发生的事情远远更多的控制。 它可以帮助你。



文章来源: I thought *.DDS files were meant to be quick to load?