Istnieje tutaj kilka czynników:
- Jak szybko możesz pobrać teksturę z dysku i do pamięci systemowej.
- Jak szybko możesz przenieść teksturę z pamięci systemowej do GPU (w twoim przypadku przez glTexImage2D).
- Ile miejsca na dysku i pamięci RAM wideo jest w twoim budżecie.
- Wydajność i jakość.
TGA jest dobrym wyborem, ponieważ w 24 i 32-bitowych nieskompresowanych przypadkach możesz odczytać dane w jednym fread / cokolwiek i wysłać wynik bezpośrednio przez glTexImage2D bez dalszego przetwarzania. To zły wybór, ponieważ może mieć największy rozmiar pliku, a jeśli dyskowe operacje we / wy stanowią wąskie gardło, odczyty będą powolne.
PNG to dobry wybór, ponieważ zachowuje jakość zdjęć przy stosunkowo niewielkim rozmiarze pliku. To zły wybór, ponieważ pliki PNG mogą ulegać powolnej dekompresji - jeśli to jest twoje wąskie gardło - no wiesz.
JPG to dobry wybór, ponieważ ogólnie ma najmniejszy rozmiar pliku i bardzo szybko schodzi z dysku (podwójnie dobry, jeśli chcesz wysłać plik przez sieć). Jest to zły wybór z powodu pośrednich etapów dekompresji oprogramowania i utraty jakości (chociaż można dostroić ustawienia jakości, aby to złagodzić). Brak kanału alfa.
DDS (lub inne skompresowane formaty) są dobrym wyborem ze względu na mniejszy rozmiar pliku i możliwość dołączenia gotowego łańcucha mipmap. Jeśli jest to format, który jest natywnie obsługiwany sprzętowo (a DDS jest natywnie obsługiwany na większości komputerach konsumenckich - również od dawna), masz taką samą korzyść jak TGA - jeden fread, trochę szturchania w nagłówku, aby dowiedzieć się, niektóre właściwości obrazu, a następnie prześlij dane bezpośrednio, bez pośrednich kroków. Skompresowane tekstury sprawią, że Twój program będzie działał szybciej i zużywa mniej pamięci RAM wideo. Są złym wyborem, ponieważ używają kompresji stratnej (co czasami może być naprawdę zauważalne) i mogą nie być obsługiwane na wszystkich urządzeniach.
Gdybym to był ja, zbudowałbym obsługę wszystkich 4 tych formatów (TGA i DDS są dość trywialne do napisania programów ładujących, z JPG i PNG użyłbym biblioteki obrazów), aby twórcy treści mogli wybrać najbardziej odpowiedni format na na podstawie tekstury.