Поддержка Qt 5 dds для экономии памяти и улучшения рендеринга

Я хотел бы загрузить файлы 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 или загружает их непосредственно на графическое оборудование как есть?

Любые другие предложения или указатели очень ценятся.

1

Решение

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 все еще не поддерживает это вообще.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]