2015-05-16 6 views
9

Ich zeichne etwas mit XWindow Drawable, Pixmap und XRender auf dem Bildschirm. Ich kann sehen, dass manchmal Flimmern ist. Gibt es eine Möglichkeit, auf VBLANK zu warten? Ich habe schon viel gegoogelt, hab Lust auf eine Münze in einem Wald.Wie warten Sie auf VSYNC in Xlib App?

Es ist KEIN OpenGL beteiligt. Es ist Linux (Ubuntu). Ich könnte (nano) sleep() verwenden, aber ich muss wissen, wann die Zeit zum Zeichnen gekommen ist.

+0

Haben Sie es geschafft, das zu beheben? (Die Dokumentation von X-bezogenen Technologien ist schwierig ...) –

Antwort

3

Ich finde die bei weitem einfachste Lösung ist GLX wegen seiner hervorragenden High-Level-Schnittstelle in Richtung Synchronisation und Doppelpufferung. Bitte beachten Sie, dass GLX nicht OpenGL ist, sondern eine X-Erweiterung. Du brauchst einen Dummy-OpenGL-Kontext als SwapBuffers (aus irgendeinem Grund), aber das war's.

Wenn Sie aus irgendeinem Grund ohne GLX auskommen möchten, können Sie dies tun, indem Sie doppelte Puffer durch X Double Buffer Extension (DBE) erstellen und manuell zur Anzeige mit der X Syncronization Extension synchronisieren. Ich habe nicht so selbst getan, aber Sie sollten etwas für Ihren Geschmack Aufruf XSyncListSystemCounters die Lage zu finden (nach entsprechender Initialisierung!):

XSyncListSystemCounters gibt einen Zeiger auf ein Array von Systemzählern vom Display unterstützt

Ich kann jedoch nicht viel mehr über den harten Weg finden. Viel Glück.