2012-05-30 10 views
6

Wydaje się, że jest to problem związany z GPU w przypadku pożaru i byłbym wdzięczny za każdą pomoc lub sugestie.Kindle Uszkodzenia i korupcja tekstur przy 60 fps

W przeważającej części moja gra obrony wieży jest w stanie uruchomić 60 klatek na sekundę, nawet z dziesiątkami wrogów i wież strzelających w każdą stronę. Jednak w pozornie przypadkowych czasach (nawet bez niczego - jak siedzenie w głównym menu) bardzo równomiernie rozmieszczone przegrania 400ms zatrzymują grę w odstępie około 2-3 sekund. Nagle zaczepy znikną, a bloki o wymiarach 16x16 pikseli będą losowo renderowane.

Te 2 usterki wydają się wzajemnie wykluczać i, jak powiedziałem, mogą być uruchamiane po prostu przez uruchomienie gry i przejście z menu głównego do ekranu wyboru poziomu, w którym minimalne zasoby są załadowane i mała logika gry dzieje się. Używam OpenSL do efektów dźwiękowych i zauważyłem, że wyłączenie sfx zmieniło czas trwania zaczepu na 280ms.

Następnie ręcznie wymusiłem szybkość klatek na sekundę z 60 fps na 30 fps (wstawiając uśpienie w pętlę zaznaczania ramki), a oba błędy ustąpiły całkowicie.

Oto przykrywka ekranu pokazująca teksturę, która nie jest renderowana. Ten błąd występuje na wszystkich 32-bitowych powierzchniach renderowania, niezależnie od wartości głębokości/szablonu i tego, czy kolor jest wyraźny czy nie.

Dziękujemy!

EDYTOWANIE: W rzeczywistości, migotanie tekstur dzieje się w każdym framerate, jednak gdzieś pomiędzy 40 a 45 fps, zaczep 400ms znika.

level select screen

main menu

+0

Co z innymi limitami FPS? na przykład 45/75 –

+0

W rzeczywistości, migotanie tekstur dzieje się przy każdej klatce, jednak gdzieś pomiędzy 40 a 45 klatek na sekundę, zaczep 400ms odchodzi ... Są bardzo powiązane, ale nie całkowicie wykluczające się z prędkością 60 klatek na sekundę. Częstość ich przyjazdów i wypadków jest silnie skorelowana. – Ajas

Odpowiedz

2

Ok, jest to bardzo subtelne bug kierowca niekoniecznie specyficzne dla Kindle Fire. Mam nadzieję, że pomogę komuś uniknąć podobnego bólu w przyszłości. Objaśniłem już wyraźnie objawy, ale źródłem błędu jest ustawienie nożyczek rect.

Zasadniczo mamy wiele animowanych elementów interfejsu użytkownika, które powiększają i znikają z ekranu, dzięki czemu możemy uzyskać całkiem niezły efekt za pomocą nożycowego prostownika. Wyzwalacz wydaje się ustawiać prostokąt nożyczek poza ekranem, a następnie renderować poza prostopadle poziomo. Spowoduje to, że procesor GPU znajdzie się w nieznacznie skręconym stanie, który nie zdaje się natychmiast pojawiać, ale stopniowo narasta.

Dodatkowo wygląda na to, że naprawiliśmy błąd, który mieliśmy na Droid RAZR, który ma układ GPU wspólny z Fire. Błąd był 5-sekundowe zamrożenie w grze, w której chcielibyśmy zobaczyć w LogCat:

W/SharedBufferStack(14208): waitForCondition(LockCondition) timed out (identity=173, status=0). CPU may be pegged. trying again. 

Oczywiście tego typu błędy są trudne do wyśledzenia i dokładne określenie warunków, ale to jest na pewno związane z renderowania zewnątrz prostowników nożyczek poza ekranem.

+0

Dla jasności: rozwiązaniem problemów z zawieszaniem, zamarzaniem i renderowaniem było przyciśnięcie nożycowego prostownika do ekranu przed wywołaniem funkcji glScissor(). – Ajas