Problem za szerokiej tekstury
Dzisiaj krótki wpis o pewnym problemie, z którym przyszło mi się spotkać podczas pracy nad projektem, o którym napiszę niebawem.
Otóż w projekcie tym musimy m.in. wyświetlać animacje. Są to animacje poklatkowe. Zrobione jest to tak, że cała animacja trzymana jest w jednym pliku graficznym gdzie zawarte są wszystkie jej klatki ułożone obok siebie i co ustalony odstęp czasu wyświetlany jest inny obszar tego obrazka. Sposób znany, popularny i skuteczny. I w tym projekcie również się sprawdzał. Jednak wczoraj powstał mały, acz dziwny i irytujący problem. Otóż po wstawieniu jednej z animacji, która miała 12 klatek, a każda klatka miała wymiary 500px x 250px, co oznacza istnienie obrazka o wymiarach 6000px x 250px, okazało się, że działa ona na moim sprzęcie, zaś na komputerach reszty zespołu wyświetla się biały obszar, który oznacza brak tekstury.
Znalezienie przyczyny problemu zajęło prawie cały dzień. Sprawdziliśmy czy wszystko z repozytorium się dobrze pobierało, czy IDE na pewno kompilowało najnowszą wersję, czy ścieżki się zgadzały… Rozwiązanie okazało się prostsze niż można było przypuszczać. Po przypomnieniu sobie, że są jakieś ograniczenia co do wielkości tekstur powstał pomysł, aby klatki animacji umieścić w pliku nie w 1 ale w 2 wierszach w wyniku czego powstał obrazek nie o wymiarach 6000px x 250px, ale 3000px x 500px i… Zadziałało! Tak, problemem było przekroczenie przy jednym z wymiarów wartości 4096px.
Ale przecież u mnie działało?! Owszem, a tajemnicą jest sprzęt na jakim pracujemy. Jako jedyny korzystam z kart graficznych AMD zarówno w laptopie jak i w komputerze stacjonarnym, zaś reszta teamu ma laptopy z kartami NVidii. Więc jak widać producent i zapewne też wersja sterownika mają duży wpływ na limity co do zawartości, chociaż jestem zdziwiony że tutaj błąd powodowała już tak niewielka wartość skoro od dłuższego czasu wszystkie karty wspierają tekstury 8192px, a nawet większe. Prawdopodobnie częściowo wina leży po stronie biblioteki SFML, z której korzystamy. Dlatego tak ważne jest testowanie produktu na kilku różnych platformach sprzętowych, żeby móc w jak największym stopniu chronić się przed takimi błędami.
Leave a Comment