Jakiś czas temu natknąłem się na problem z eglSwapBuffers
zamrażania telefon z następującym komunikatem wyświetlane w dzienniku urządzenia:Android zamrożenie w OpenGL | ES (.. CPU może być powiązany próbuje ponownie)
W/SharedBufferStack(1110): waitForCondition(LockCondition) timed out (identity=28, status=0). CPU may be pegged. trying again.
Widziałem dyskusję na ten temat w Internecie, ale jedynym rozwiązaniem, które znalazłem, było wywołanie glFinish
po eglSwapBuffers
. To rozwiązanie powoduje jednak spadek liczby klatek na sekundę o 10-20, co jest dalekie od akceptowalnego.
Zagadnienia zostały otwarte i można znaleźć here
Ktoś powiedział, że z wykorzystaniem tekstur kwadratowych wyeliminować ten problem. Przez kwadrat początkowo myślałem, że chodzi mu o teksturę "mocy dwóch", ale po upewnieniu się, że nie używam żadnych tekstur o braku mocy i nie pozbyłem się problemu, zacząłem myśleć, że mógł on faktycznie oznaczać tekstury z dopasowaniem Szerokość i wysokość?
Testuję na HTC Desire z systemem Android 2.3.3. Ktoś skomentował, że przyszłe wersje powinny rozwiązać ten problem, ale 2.3.3 jest zainstalowany na tylu urządzeniach, że nie możemy go zignorować.
W każdym razie, ktoś ma jakieś przemyślenia na ten temat? Jesteśmy bardzo blisko wysyłki tytułu, a ten problem zagraża harmonogramowi.
Prawdopodobnie jest to błąd ze sterownika. – robermorales
Ta osoba ma problem z innym gl swapbufersami, i jest proponowane łagodzenie w komentarzach: http://stackoverflow.com/questions/12939705/sdl-gl-swapbuffers-is-intermently-slow - może to pomóc. .. – Yakk
spróbuj dumpsys SurfaceFlinger i zobacz, co raport eglSwapbuffers() ... porównuje do twoich pomiarów. – Shark