Synchronisieren mehrerer OpenGL-Fenster mit vsync

In einer Windows-Anwendung sind mehrere OpenGL-Fenster gleichzeitig geöffnet. Im Idealfall möchte ich, dass jedes dieser Bilder mit 60 fps gezeichnet wird und mit der Bildschirmaktualisierung synchronisiert wird.

Für jeden Renderkontext rufe ich aufwglSwapIntervalEXT(1) vsync einschalten. Jedes Fenster hat einen eigenen Anzeigethread, der den Rahmen zeichnet und dann aufruftSwapBuffers aktualisieren.

Es stellt sich heraus, dass die Fenster sich gegenseitig "bekämpfen": es sieht aus wie dasSwapBuffers Aufrufe werden synchronisiert und warten aufeinander, obwohl sie sich in separaten Threads befinden. Ich messe die Bild-zu-Bild-Zeit jedes Fensters und mit zwei Fenstern sinkt diese auf 30 fps, mit drei bis 20 fps usw.

Wenn ich vsync mit ausschaltewglSwapIntervalEXT(0)Sie aktualisieren sich glücklich mit 60 fps, egal wie viele Fenster ich öffne. Bei einem geöffneten Fenster ist dies jedoch bei weitem nicht so reibungslos wie bei aktiviertem vsync.

Gibt es eine Möglichkeit, mit OpenGL das zu erreichen, was ich will?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage