Dateiformat: dxt ed

Ich kenne dieses Format bisher nur als internes Datenformat, noch nicht als echte (eigenständige) Datei, somit weiß ich auch nichts über Header oder ähnliches.

Das Bild wird in Blöcke von 4*4 Bildpunkten geteilt. Genaueres hängt von der Version ab:

DXT1 ed

Offset		Größe		Bedeutung
  0bit		 16bit		 Farbwert c0 (rgb 5:6:5)
 16bit		 16bit		 Farbwert c1 (rgb 5:6:5)
 32bit		 32bit		 Pixel-Tabelle (4*4 Pixel mit je 2 bit)

Die weiteren Farbwerte sind:

if ( c0 > c1 ){
	c2 = ( 2 * c0 + 1 * c1 ) / 3;
	c3 = ( 1 * c0 + 2 * c1 ) / 3;
}else{
	c2 = ( c0 + c1 ) / 2;
	c3 = transparent;
}

DXT2/3 ed

Offset		Größe		Bedeutung
  0bit		 64bit		 Alpha-Tabelle (4*4 Pixel mit je 4 bit)
 64bit		 16bit		 Farbwert c0 (rgb 5:6:5)
 80bit		 16bit		 Farbwert c1 (rgb 5:6:5)
 96bit		 32bit		 Pixel-Tabelle (4*4 Pixel mit je 2 bit)

Die weiteren Farbwerte sind:

c2 = ( 2 * c0 + 1 * c1 ) / 3;
c3 = ( 1 * c0 + 2 * c1 ) / 3;

Bei DXT2 sind die Farbwerte mit dem Alphawert vormultipliziert!

DXT4/5 ed

Offset		Größe		Bedeutung
  0bit		  8bit		 Alphawert a0
  8bit		  8bit		 Alphawert a1
 16bit		 48bit		 Alpha-Tabelle (4*4 Pixel mit je 3 bit)
 64bit		 16bit		 Farbwert c0 (rgb 5:6:5)
 80bit		 16bit		 Farbwert c1 (rgb 5:6:5)
 96bit		 32bit		 Pixel-Tabelle (4*4 Pixel mit je 2 bit)

Die weiteren Alpha- und Farbwerte sind:

if ( a0 > a1 ){
	a2 = ( 6 * a0 + 1 * a1 ) / 7;
	a3 = ( 5 * a0 + 2 * a1 ) / 7;
	a4 = ( 4 * a0 + 3 * a1 ) / 7;
	a5 = ( 3 * a0 + 4 * a1 ) / 7;
	a6 = ( 2 * a0 + 5 * a1 ) / 7;
	a7 = ( 1 * a0 + 6 * a1 ) / 7;
}else{
	a2 = ( 4 * a0 + 1 * a1 ) / 5;
	a3 = ( 3 * a0 + 2 * a1 ) / 5;
	a4 = ( 2 * a0 + 3 * a1 ) / 5;
	a5 = ( 1 * a0 + 4 * a1 ) / 5;
	a6 = 0;
	a7 = 255;
}

c2 = ( 2 * c0 + 1 * c1 ) / 3;
c3 = ( 1 * c0 + 2 * c1 ) / 3;

Bei DXT4 sind die Farbwerte mit dem Alphawert vormultipliziert!

Categories: Computer