Linux-Framebuffer-Grafik und VSync

Ich mache ein Spiel in C, das auf dem Linux-Framebuffer funktioniert. Bisher habe ich ein rotes Quadrat von 100 x 100, das sich wie ein Zeiger zusammen mit der Maus bewegt. Ich habe die doppelte Pufferung implementiert und sie funktioniert korrekt (das Quadrat flackert nicht). Das Problem ist, dass ziemlich viele Risse horizontal auftreten. Ich meine damit, wenn sich das Quadrat auf der x-Achse bewegt, ist es, als wäre es horizontal geteilt, und ein Teil davon rückt etwas mehr vor als der andere. Dieser "Riss" breitet sich langsam von oben nach unten auf dem Platz aus, wenn ich ihn weiter bewege.

Ich glaube, es passiert, weil die Hardware den Framebuffer in dem Moment liest, in dem ich den Doppelpuffer in den Hauptpuffer kopiere.

Ich habe versucht, das Problem mit dem FBIO_WAITFORVSYNC ioctl zu bekämpfen, aber keinen Erfolg.

Irgendwelche Ideen, wie ich VSync im Framebuffer machen könnte? Bitte ergänzen Sie Ihre Erklärungen um Details, da dies das erste Mal ist, dass ich solche Dinge auf einem Linux-basierten Betriebssystem programmiere, damit ich sie möglicherweise nicht anders verstehe.

Hier ist mein Code:http://pastebin.com/KJ4iaVEL

Antworten auf die Frage(2)

Ihre Antwort auf die Frage