Bitte Aufmerksam lesen und wem es gefällt kann es verlinken.
Der Aufarbeitung dieses Textes stammt nicht von mir alle Quellen wurden unten abgegeben.
Original Quelle:

=====DirectDrawSurfaces=====
**Direct Draw Surfaces** ist ein von Microsoft entwickeltes Grafikformat entwickelt fur Echtzeit-3D-Anwendungen und implementiert in DirectX. Es ermöglicht gute Kompression von Texturdaten, Speicherung von Mipmaps, Volumentexturen und viele weitere Features. Es erfuhr sehr große Akzeptanz und hat heute eine sehr weite Verbreitung.
====Hintergrund====
Lange Zeit wurde in Spielen BMP\- und TGA-Dateien zum Speichern von Texturen benutzt. Die Formate waren gut dokumentiert und haben sich schon viele Jahre bewehrt und wurden gut unterstützt. Für die spezielle Anwendung in der Echtzeitgrafik hatten sie jedoch einige Nachteile.
In beiden Formaten lagen die Bilddaten unkomprimiert vor, was zu hohen Dateigrößen führte. Mit steigenden Texturgrößen steigerte sich auch die Dateigröße exponentiell. TGA bot zumindest verlustfreie Lauflangen-Kodierung, die aber bei Oberflächentexturen wenig effizient ist.
Daraus resultierte ebenfalls der Nachteil steigender Ladezeiten für die Texturen.
Damit verbunden war ebenfalls die Berechnung von Mipmaps. Mipmaps sind Größenvarianten der Originaltextur, die in größeren Entfernungen dargestellt werden, wenn nicht mehr die gleiche Detailauflösung auf einer Textur benötigt wird. Diese Mipmaps wurden lange Zeit beim Laden der Textur automatisch vom Spiel erstellt, was ebenfalls eine Verzögerung des Ladeprozesses verursachte.
Um diesen Nachteilen entgegen zu arbeiten stellte Microsoft als Teil seines Multimedia-Frameworks DirectX das Grafikformat "DirectDraw Surfaces" (DDS) vor. DDS wurde erstmals 1999 in DirectX 7 eingesetzt. Ein Jahr später wurde das Format in DirectX 8 um die Unterstützung von Volume-Textures erweitert.
Neu an DirectDrawSurfaces war die native Unterstützung der verlustbehafteten S3TC-Kompression, die fest im Format vorgesehen ist, auf die aber auch verzichtet werden kann. Die Kompression ermöglicht eine Reduktion der Dateigröße auf bis zu 25%.
Dem Problem der Mipmap-Generierung wurde entgegnet, indem die Berechnung der Mipmaps vom Ladevorgang der Textur in das Speichern der Textur verschoben wurde. Die Mipmaps wurden im Dateiformat selbst abgelegt, durch die Kompression war der Speicherplatz verlust maginal. Die Anwendung konnte diese berechneten Mipmaps benutzen und musste keine eigenen mehr berechnen.
Diese Vorteile sorgten für eine gute Verbreitung und DDS wurde bis 2005 quasi das Standardtexturformat im Echtzeit-3D-Bereich.
====Dateistruktur====
Die Struktur der DDS-Datei ist in der Spezifikation von Microsoft festgelegt und wird auch mit wenigen Ausnahmen eingehalten.
* Magic-value
* Header (Formatspezifikation)
* Main surface data (Byte-array)
* Attached surface data (array von Byte-arrays)
Die Datei beginnt mit einem Magic-Value, der bereits das Format der vorliegenden Daten bestimmt. Ob komprimiert (und wenn ja wie komprimiert) oder unkomprimiert.
Der Header enthält Metadaten über die Datei. Darunter sind Standards wie Höhe, Breite, Pixelformat, aber auch spezielle Angaben wie die Tiefe der Datei (bei Volumentexturen) und die Anzahl von MipMaps. Das Pixelformat enthält verschiedene Angaben über die Kanalmasken, ob Komprimierung verwendet wird und welche Farbtiefe die Farbkanäle haben. Das Format unterstützt bis zu 32bit pro Kanal, was jedoch nicht von jedem Programm, dass DDS-Dateien lesen oder schreiben kann unterstützt wird.
Je nach Texturtyp (2D-Textur, Cube-Texture oder Volumentextur) liegen die Texturdaten unterschiedlich in der Datei. Bei einer 2D-Textur kommt zunächst die Haupttextur als byte-Array und anschließend absteigend die Mipmaps bis zur Mipmap-Größe 1x1.
Bei Cube-Texturen kommt zunächst die erste von acht Seitenflächen, darauf hin deren MipMaps, anschließend die nächste Seitenfläche mit MipMaps und so weiter.
Bei Volumentexturen kommen zunächst die Hauptexturen, danach die Mipmaps jeder MipMap-Stufe.
====Kompression====
Die Pixeldaten können in DDS-Files auf verschiedene Art und Weisen kodiert werden. Zu unterscheiden sind unkomprimierte und komprimierte Verfahren.
Unkomprimiert liegen die Daten als volle Pixelwerte vor. Diese können unterschiedlich kodiert sein. Zum Beispiel A8R8G8B8, was einem normalen 8bit-je-Kanal Pixel mit 8bit-Alpha-Kanal entspricht. A1R8G8B8 ist fur 24bit Farbe mit nur 1bit Alpha. A1R5G6B5 ist fur 16bit Farbe.
Neben der unkomprimierten Kodierung ist es möglich die Pixeldaten kodiert in der Datei abzulegen. Dabei ist vom Dateiformat der S3TC-Komprimierungsalgorithmus vorgesehen. Im Zusammenhang mit DirectDrawSurfaces spricht man oft auch vom DXT-Komprimierungsverfahren.
Der S3-Texture-Compression-Algorithmus wurde von S3D Graphics speziell fur die Anwendung im 3D-Bereich entwickelt. Der Algorithmus wurde für die Anwendung in Hardwarekomponenten optimiert. S3TC-Komprimierte Texturdaten brauchen dadurch nicht von der Software dekomprimiert, sondern können performance-sparend in der Hardware verarbeitet werden. Im Video-RAM der Grafikkarten werden die dekomprimierten Texturdaten in Reinform abgelegt und von der Anwendung verwendet. S3TC ist ein verlustbehafteter Kompressionsalgorithmus. Eine 32bit-ARGB-Bitmapgrafik kann auf 4:1 ihrer Originalgröße verringert werden. Vom Algorithmus spezifiziert ist lediglich die Dekompression, was es ermöglicht Entwicklern eine effiziente Wege der Komprimierung zu beschreiten. So gibt es von S3D, von nVidia und Ati eigene Implementationen der Codecs, die sich in ihrer Kompressionsperformance und Qualitat unterscheiden.
Vom S3TC-Verfahren gibt es mehrere Codecs. Die Codecs unterscheiden sich in der Art und Weise wie die Pixel komprimiert werden und werden je nach gewünschten Zweck eingesetzt. Es gibt fünf Codecs: DXT1, DXT2, DXT3, DXT4 und DXT5.
DXT1, DXT3 und DXT 5 komprimieren die Farbkanäle in Blöcken von 64bit (DXT1) oder 128bit (DXT3 und DXT5).
Dagegen DXT2 und DXT4 verrechnen den Alpha-Wert mit den Pixelwerten(premultiplied). Diese Codecs finden seltener praktische Anwendung.
Die meiste Verbreitung haben DXT1 und DXT5. DXT1 eignet sich besonders für Texturen, die eigentlich keinen oder nur einen weißen Alpha-Kanal benötigen. DXT5 speichert Texturen mit vollem 8bit Alpha, ist dadurch etwas größer in der Dateigröße.
====Anwendung====
DirectDrawSurfaces haben sich im 3D-Sektor, speziell bei der Spieleproduktion sehr weit verbreitet. Das Texturformat bietet ein flexibles Speicherformat, das durch ein gutes Kompressionsverfahren auch bei hohen Texturdimensionen kompakte Dateigrößen und eine performante Verarbeitung ermöglicht.
Durch das Speichern von Mipmaps wird ermöglicht Berechnungen aus der 3D-Software in den Textur-Exporter zu verlagern. Das Programm hat damit nicht mehr die Aufgabe während der Laufzeit Mipmaps zu erstellen, weil dies bereits während des Exports der Textur erfolgt.
Durch die Möglichkeit auch Volumendaten (z.B Cubemaps) zu speichern wird die Notwendigkeit mit verschiedenen Texturdateien oder Sprites zu arbeiten. Die Art der Nutzung der Textur wird somit gleich im Format definiert und kann optimiert werden.
Letztlich ist auch eine gewisse Zukunftssicherheit gewährleistet. Durch die Möglichkeit auch höhere Farbtiefen als 8bit pro Kanal einzusetzen ist das Format auch bereit fur zukünftige Anwendungen, die feine Farb-Abstufungen erfordern.
====Implementationen==== ===DirectX - DxTool===
Entwickelt von Microsoft bieten das DirectX SDK eine Beispielimplementation des DDS-Formats. Die Quellen liegen zum Teil offen und können weiterbenutzt werden. Ebenfalls ist ein Beispielprogramm Namens DxTool beigelegt wo das Laden und Speichern von DDS-Dateien getestet werden kann. Für die S3TC-Kompression wird eine DLL-Bibliothek mitgeliefert.

===nVidia DDS Tools===
Im Spielesektor sehr beliebt sind die DDS-Tools von des Grafikprozessorherstellers nVidia. Dieses Texture Development Kit beinhaltet verschiedene Plugins fur Photoshop und Windows, die die Vorschau und Veränderung von DDS-Dateien vereinfachen. Für Photoshop bietet es die Möglichkeit DDS-Texturen einzulesen und wieder zu Komprimieren. nVidia bietet dabei ein weites Feld an Einstellungsmöglichkeiten und schöpft in Verbindung mit den Möglichkeiten von Photoshop das DDS-Format voll aus. So zum Beispiel beim Umgang mit DDS-Files mit 32bit pro Farbkanal. Auch Features wie Cubemaps und Mipmap-Generierung wurden implementiert.
===Squish===
Im DirectX-SDK gibt es fur das DDS-Format eine C+\+ Wrapperklasse, die das Funktionsspektrum des Formats abbildet und die es möglich macht DDS in eigene Projekte anzuwenden. Unabhangig von der Formatspezifikation ist jedoch das Kompressionsverfahren S3TC. Um also DDS-Dateien nicht nur einzulesen, sondern auch als Bitmap wiedergeben zu können müssen die komprimierten Daten dekodiert werden. Open Source-Implementationen für diesen Zweck sind eher selten anzufinden. Die Bekannteste ist "Squish", eine C+\+ \-Bibliothek von Simon Brown, die das S3TC de\- und enkodieren ubernimmt.
===JSquish===
Will man für Java Programme zur DDS-Manipulation schreiben steht man vor größeren Problemen. Zwar gibt es ebenfalls Wrapperklassen fur das Format, jedoch sind S3TC-Kompressionsimplementationen weitaus schwerer zu finden. Jsquish ist die einzige Implementation, eine Übertragung von Squish nach Java. Entwickelt wurde JSquish als kleine Library im JavaGaming-Forum und ist daher bis heute relativ unbekannt.
====Quellen====
DDS File reference by MSDN|

Wikipedia (International): DirectDraw Surface|DirectDraw Surface - Wikipedia, the free encyclopedia
Wikipedia (Deutschland): Direct Draw Surface|DirectDraw Surface
Wikipedia (International): S3TC|S3 Texture Compression - Wikipedia, the free encyclopedia
Wikipedia (Deutschland): S3TC|S3 Texture Compression
Squish by Simon Brown|

DDSImage-Class im JOGL|

Jsquish Compression Library|

Lesewert:










