Qt 5 dds支持,节省内存和改善渲染

Qt 5 dds support to save memory and improve rendering

本文关键字:内存 节省 dds 支持 Qt      更新时间:2023-10-16

我想将dds文件加载到Qt 5.1中,并具有节省内存和提高渲染性能的好处,因为dds文件在许多情况下比它们的png等效文件的大小更小(由于数据破坏压缩),并且还存储在更缓存友好的渲染结构"平躺"(即http://fgiesen.wordpress.com/2011/01/17/texture-tiling-and-swizzling/)中,而不是通常的原始图像数据。

但是…当我在谷歌上搜索时,我找不到任何关于这个主题的参考,我只发现其他人读取dds文件并将其转换为QImage,我怀疑这只是将dds解包为原始rgba,仅在从磁盘读取时提供一些额外的性能,但保留所有坏的部分,如更多的内存,效率较低的文本读取,现在也压缩工件。

我是否误解了Qt是如何处理纹理的,或者dds格式dxt1-5是否可以在Qt 5.1中正确使用?

QImageReader是否"解包"dds文件为原始文件或实际上直接将它们加载到图形硬件?

QImage是一个纯软件对象,它不会在显卡上存储任何东西,也不支持外来的内部数据排序。下面列出了QImage支持的内部格式:https://doc.qt.io/qt-5/qimage.html#Format-enum

所以你基本上没有其他的选择来获取数据到一个QImage中,除了解压所有的东西并把它摊平。

QPixmap支持直接从文件中读取,参见https://doc.qt.io/qt-5/qpixmap.html#load

与QImage不同的是,QPixmap是一个将数据存储在显卡上的对象。从理论上讲,在给定Qt接口的情况下,实现您的设想是可能的。然而,我有根据的猜测是Qt仍然不支持这个。