Я хотел бы загрузить файлы dds в Qt 5.1 и воспользоваться преимуществом экономии памяти и повышения производительности рендеринга, поскольку файлы dds во многих случаях имеют меньший размер (из-за сжатия, разрушающего данные), чем их png-эквивалент, а также хранятся в более дружественной кэш-памяти. рендеринг структуры «черепица» (т.е. http://fgiesen.wordpress.com/2011/01/17/texture-tiling-and-swizzling/) чем обычные необработанные данные изображения.
Но … я не могу найти никаких ссылок на эту тему при поиске в Google. Я нахожу только тех, кто читает файлы dds и конвертирует их в QImage, который, как я подозреваю, только распаковывает dds в raw rgba, что дает дополнительную производительность при чтении с диска, но сохранение всех плохих частей, таких как увеличение памяти, менее эффективное считывание текселей, а теперь также и артефакты сжатия.
Я не понял, как Qt обрабатывает текстуры, или могут ли форматы dds dxt1-5 быть корректно использованы в Qt 5.1?
QImageReader «распаковывает» файлы dds в raw или загружает их непосредственно на графическое оборудование как есть?
Любые другие предложения или указатели очень ценятся.
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 все еще не поддерживает это вообще.
Других решений пока нет …