Ich arbeite an einem Projekt mit SDL und OpenGL. Das Spiel funktioniert hervorragend unter Windows, Linux, OS X und iOS. Die Android-Version zeigt jedoch insbesondere auf meinem Telefon ein Problem. Ich habe ein anderes Gerät getestet und dort funktioniert es auch super.
Das Problem, mit dem ich konfrontiert bin, ist ein visueller Fehler. Es passiert in Bursts: zum Beispiel: 90 Frames in Ordnung und dann 40 Frames die Panne. Die Panne selbst ist schwer zu beschreiben, aber ich werde es versuchen. Der Bildschirm wird teilweise korrekt aktualisiert (von der Oberseite meines Telefons bis ungefähr zur Hälfte) und teilweise flackert. Der Flackereffekt ist eine Art Hin- und Herspringen. Ich denke, dass es mit doppelter Pufferung zusammenhängt. Ich denke das, weil das, was ich auf dem Bildschirm sehe, in jedem Bild hin und her springt. Es ist, als ob die Hälfte des Bildschirms ein Bild in der Zeit und das nächste Bild 2 Bilder zu spät ist. Ziemlich wie eine Prozession von Echternach, könnte man sagen. Wenn ich es in einem Diagramm zeichne, in dem die Zeit vergeht, wenn ich mich im Diagramm nach unten bewege, denke ich, dass ich '
left half | right half (phone is in landscape)
------------------------
time 1 | 1 1
time 2 | 2 2
time 3 | 3 1
time 4 | 4 4
time 5 | 5 3
time 6 | 6 6
time 7 | 7 5
time 8 | 8 8
time 9 | 9 7
Die rechte Hälfte ist also ein Bild in der Zeit und das nächste Bild zeigt das vorherige Bild. Dies unterstützt meine Theorie, dass es ein Problem mit der doppelten Pufferung gibt. Es sieht so aus, als könnte der Backbuffer nicht vollständig aktualisiert werden, bevor er auf den Bildschirm gebracht wird, oder so.
Außerdem ist die Aufteilung zwischen gut und fehlerhaft auf dem Bildschirm von Bild zu Bild unterschiedlich. Diese Punkte beweisen meines Erachtens, dass es sich um ein Synchronisationsproblem handelt, und hängen stark vom Zeitpunkt des Geschehens ab. Hinzufügen glFinish();
vor dem SDL_GL_SwapWindow();
Anruf hilft nicht.
Versionsinfo: SDL meldet, dass vsync aktiviert werden soll. Ich glaube jedoch, dass dies nicht reißt. Mein Handy ist ein Samsung Galaxy S3 mini und läuft mit Android 5.1.1 (CM12) und die GPU (Mali-400) unterstützt OpenGL ES 2.0. Andere Spiele laufen auf meinem Handy in Ordnung.
Antworten:
Ein Abschnitt der Readme-Datei spricht darüber:
quelle