Hier gibt es eine Reihe von Überlegungen:
- Wie schnell können Sie die Textur von der Festplatte in den Systemspeicher übertragen?
- Wie schnell Sie die Textur vom Systemspeicher auf die GPU übertragen können (in Ihrem Fall über glTexImage2D).
- Wie viel Speicherplatz und Video-RAM ist in Ihrem Budget.
- Leistung und Qualität.
TGA ist eine gute Wahl, da Sie in den unkomprimierten 24- und 32-Bit-Fällen die Daten in einem einzigen Fread lesen und das Ergebnis ohne weitere Verarbeitung direkt über glTexImage2D senden können. Es ist eine schlechte Wahl, da es die größte Dateigröße haben kann und wenn Festplatten-E / A ein Engpass ist, werden Ihre Lesevorgänge langsam sein.
PNG ist eine gute Wahl, da es die Qualität von Bildern mit einer relativ kleinen Dateigröße bewahrt. Es ist eine schlechte Wahl, da PNGs nur langsam dekomprimiert werden können - wenn das dann Ihr Engpass ist - wissen Sie.
JPG ist eine gute Wahl, da es im Allgemeinen die kleinste Dateigröße hat und sich sehr schnell von der Festplatte löst (doppelt gut, wenn Sie die Datei über ein Netzwerk senden müssen). Es ist eine schlechte Wahl, da zwischenzeitliche Software-Dekomprimierungsschritte und Qualitätsverluste auftreten (obwohl Sie die Qualitätseinstellungen anpassen können, um dies zu mildern). Auch kein Alphakanal.
DDS (oder andere komprimierte Formate) sind aufgrund der geringeren Dateigröße und der Möglichkeit, eine vorgefertigte Mipmap-Kette einzuschließen, eine gute Wahl. Wenn es sich um ein Format handelt, das von Haus aus von der Hardware unterstützt wird (und DDS von Haus aus von den meisten Consumer-PCs unterstützt wird - auch schon seit langer Zeit), haben Sie den gleichen Vorteil wie TGA: Ein Problem, ein bisschen Stöbern im Header, um es herauszufinden einige Bildeigenschaften, dann senden Sie die Daten ohne Zwischenschritte direkt durch. Komprimierte Texturen beschleunigen außerdem die Ausführung Ihres Programms und belegen weniger Video-RAM. Sie sind keine gute Wahl, da sie eine verlustbehaftete Komprimierung verwenden (was manchmal sehr auffällig sein kann) und möglicherweise nicht auf jeder Hardware unterstützt werden.
Wenn ich es wäre, würde ich die Unterstützung für alle 4 dieser Formate aufbauen (TGA und DDS sind ziemlich trivial, um Loader zu schreiben, mit JPG und PNG würde ich eine Bildbibliothek verwenden), damit Inhaltsersteller das am besten geeignete Format auswählen können eine Pro-Textur-Basis.