Сжатие текстур, в отличие от обычного сжатия изображений, предназначено для одной конкретной цели: текстура .А это означает быстрый произвольный доступ к данным.
Форматы сжатия без потерь обычно не очень эффективны, когда речь идет о шаблонах произвольного доступа.Основные форматы сжатия без потерь - это некоторая форма RLE или табличного кодирования.Их достаточно для распаковки всего набора данных одновременно, но они ужасны , когда могут узнать, в какой ячейке памяти находится значение texel (U, V).
И этовопрос задается много при доступе к текстурам.
Таким образом, аппаратные форматы сжатия текстур без потерь отсутствуют.
Возможны следующие варианты:
Использование текстурной памяти как своего рода кеша.То есть, когда вы определите, что вам понадобится определенное изображение в этом кадре, распакуйте его.Это может быть сделано на процессоре или графическом процессоре (через вычислительные шейдеры или тому подобное).Обратите внимание, что для быстрой декомпрессии с помощью графического процессора вам придется придумать схему сжатия, которая использует преимущества параллельного выполнения.Большинство форматов сжатия без потерь не особенно параллельны.
Если определенное изображение не использовалось какое-то время, вы помещаете его в стопку «для повторного использования».А если вам нужно распаковать новое изображение, вы можете извлечь из этой стопки наименее последнее использованное изображение, вместо того, чтобы постоянно создавать / уничтожать объекты текстуры OpenGL.
Создание собственногоСхема сжатия без потерь, разработанная для ваших конкретных потребностей.Если вам абсолютно необходимы точные значения текселей из текстуры, я предполагаю, что вы не используете линейную фильтрацию при доступе к этим текстурам.Так что это не совсем цвета;это произвольная информация о текселе.
Я мог бы предложить сжатие полей (улучшенная упаковка ваших битов в доступное пространство).Но, не зная, что на самом деле означают ваши данные, я не могу сказать, подойдет ли вам ваш конкретный вариант использования.