Ich arbeite an einem Spiel, das auf einigen Geräten nicht mit voller Geschwindigkeit ausgeführt werden kann. Auf Tegra2 liegt die Leistung mit vielen Optimierungen nahe 40 fps. Die Framerate ist stabil, aber die Animationen sind nicht flüssig genug, daher brauche ich einen vsync.
Mit 2.3 Android SDK können wir die EGL-Bibliothek nativ verwenden. Also versuche ich eglSwapInterval zu verwenden, aber kein Erfolg. In diesem GDC-Papier scheint Tegra2 dies zu können.
Ps: Thread.sleep (), um eine konstante FPS zu erzwingen, ist keine akzeptable Lösung
Antworten:
Gemäß diesem Thread in einigen OpenGL-Benchmarks ignorieren die Treiber der meisten Geräte das eglSwapInterval einfach, aber in tegra2 sollte vsync standardmäßig aktiviert sein (und eglSwapInterval kann verwendet werden, um es zu deaktivieren).
Vielleicht ist die vsync-Rate auf Ihrem Gerät so, dass Ihr Stottern dadurch entsteht, dass Sie manchmal schlagen, manchmal die Frame-Zeit verpassen? Haben Sie versucht, durch Deaktivieren von vsync die Situation tatsächlich zu verbessern?
quelle
Veröffentlichung eines Beispiels mit 30 FPS mithilfe der Choreographen-API. https://github.com/googlesamples/android-ndk/tree/master/choreographer-30fps Funktioniert das für Sie?
quelle