Ich dachte, * .DDS-Dateien sollten sich schnell laden lassen?

Ok, also versuche ich, die Vor- und Nachteile der Verwendung verschiedener Texturkomprimierungstechniken abzuwägen. Ich verbringe 99,999% meiner Zeit damit, 2D-Spritespiele für Windows-Computer mit DirectX zu programmieren.

Bisher habe ich mir Texture Packing (SpriteSheets) mit Alpha-Trimming angeschaut und das scheint eine anständige Möglichkeit zu sein, etwas mehr Leistung zu erzielen. Jetzt beginne ich, mir das Texturformat anzusehen, in dem sie gespeichert sind. derzeit ist alles als * .PNGs gespeichert.

Ich habe gehört, dass * .DDS-Dateien gut sind, besonders wenn sie mit der DXT5-Komprimierung (/ 3/1 abhängig von der Aufgabe) verwendet werden, da die Textur im VRAM komprimiert bleibt. Die Leute sagen auch, dass sie, da sie bereits DirectDraw-Oberflächen sind, viel, viel schneller laden.

Also habe ich eine Anwendung erstellt, um dies zu testen. Ich rufe die Leitung unter 20 Mal an und löse die Textur zwischen jedem Anruf.

    for (int i = 0; i < 20; i++)
 {
  if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, L"Test.dds", &g_pTexture ) ) )
  {
   return E_FAIL;
  }

  g_pTexture->Release();
  g_pTexture = NULL;
 }

Wenn ich dies nun mit einer DXT5-Textur versuche, dauert die Fertigstellung 5x länger als beim Laden in einem einfachen * .PNG. Ich habe gehört, dass es langsamer werden kann, wenn Sie keine Mipmaps generieren. Deshalb habe ich das zweimal überprüft. Dann habe ich das Programm geändert, mit dem ich die * .DDS-Datei erstellt habe. Dabei habe ich auf NVIDIAs eigene Datei nvcompress.exe gewechselt, aber nichts davon hatte Auswirkungen.

BEARBEITEN: Ich habe vergessen zu erwähnen, dass die Dateien (* .png und * .dds) dasselbe Bild sind, nur in verschiedenen Formaten gespeichert. (Gleiche Größe, Alpha-Menge, alles!)

EDIT 2: Wenn die folgenden Parameter verwendet werden, wird es fast 2,5-mal schneller geladen UND verbraucht VIEL weniger VRAM!

 D3DXCreateTextureFromFileEx( g_pd3dDevice, L"Test.dds", D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_FROM_FILE, 0, D3DFMT_FROM_FILE, D3DPOOL_MANAGED, D3DX_FILTER_NONE, D3DX_FILTER_NONE, 0, NULL, NULL, &g_pTexture )

Jetzt verliere ich jedoch alle Transparenz in der Textur. Ich habe mir die DXT5-Textur angesehen und sie sieht in Paint.NET und DirectX DDS Viewer gut aus. Bei voller Beladung wird die Transparenz jedoch durchgehend schwarz. ColorKey Problem?

EDIT 3: Ignoriere das letzte bisschen, ich war idiotisch und hatte in meiner "schnellen Beispiel" -Eile vergessen, Alpha-Blending auf dem D3DXSprite-> Begin () zu aktivieren. Doh!

Antworten auf die Frage(2)

Ihre Antwort auf die Frage