DDS - Direct Draw Surface - это формат контейнера, заполненного одним или несколькими изображениями, снабженного специальным DDS заголовком.
Как правило, в таком формате хранятся сжатые аппаратно-декодируемыми методами текстуры (S3TC, PVR, ATC, ETC). Вместе с тем, контейнер позволяет хранить и несжатые цветовые данные.
Тип метода сжатия указан в DDS-заголовке, в полле "_fourcc", в виде четырехсимвольной строки.
Пример описания DDS-заголовка:
https://github.com/FrankStain/tex-conv/blob/master...
Пример непосредственной загрузки DDS файла:
https://github.com/FrankStain/tex-conv/blob/master...
При загрузке DDS-файла, первым этапом читаем заголовок, все что дальше заголовка - это изображени(е|я).
Если в заголовке файла указан формат сжатия данных, то перед их ручным использованием данные надо распаковать. Несжатые данные (RGB(1|4|8)(A) форматы) можно использовать прямо из файла.
Писать распаковщик формата сжатия своими руками - дело затруднительное. Легче взять готовые библиотеки у непосредственных разработчиков или посредников этих форматов.
ATC распаковывается с помощью Adreno SDK (
https://developer.qualcomm.com/download ).
PVR распаковывается с помощью PowerVR SDK (
community.imgtec.com/developers/powervr/graphics-sdk ).
DXT или S3TC обрабатывают как оба вышеперечисленных пакета, так и DirectX SDK. Так же существует набор утилит от nVidia - Texture Tools (
https://developer.nvidia.com/legacy-texture-tools ).