2016-08-09 48 views
0

Ich benutze Qt und OpenGL und GLEW, um eine Textur auf einem Quad zu mappen und es zu rendern. Ich möchte die Textur für jeden Frame ändern und das Fenster kontinuierlich aktualisieren. Wie kann ich es zwingen, ständig zu aktualisieren?Update OpenGL Fenster kontinuierlich

Das Problem wird wie in den Kommentaren erwähnt gelöst, indem ein Timer hinzugefügt und an einen Steckplatz angeschlossen wird, um die Aktualisierungsfunktion zu signalisieren.

+0

Was meinst du mit "Fenster kontinuierlich aktualisieren"? – Shumush

+0

Ich möchte die Textur laden und anzeigen und dann die zweite Textur laden und anzeigen und so weiter. jetzt aktualisiert es das Fenster jedes Mal, wenn sich die Maus bewegt. Ich benutze auch qt und OpenGL. – user3178756

+0

Dann sollten Sie Ihre Hauptschleife betrachten, wenn sie auf ein Ereignis wartet oder wenn sie nach einem Ereignis fragt. Ich denke, qt wartet standardmäßig auf ein Ereignis und blockiert somit Ihre Schleife. Aber ich bin mir nicht sicher. – Shumush

Antwort

1

Wenn Sie mit qt das Fenster erstellen und die Ereignisse verwalten, z. B. wenn sich die Maus bewegt, kann die Anwendung warten, bis ein Ereignis eintritt, bevor das Fenster erneut gezeichnet wird. Ich denke, Sie könnten ein QTimer Objekt verwenden und sein Timeout-Signal mit Ihrer Update-Funktion verbinden.

Andernfalls, wenn Sie Ereignisse mit einigen waitEvent() Funktion behandeln, ändern Sie es mit einer nicht blockierenden Version.

+0

Signal auf 'frameSwapped' könnte besser sein. – Inline

+0

'frameSwapped' ist nur ein Signal von' QQuickWindow', wir wissen nicht, ob er es benutzt. – Shumush

+0

Ich benutze QGLWidget, das Hinzufügen von nur update am Ende von paintGL zwingt auch das Rendering weiter, aber ist es eine gute Lösung? – user3178756

2

Wenn Sie die Puffer austauschen möchten, müssen Sie Ihre plattformspezifische Swap-Funktion (wglSwapBuffers, glXSwapBuffers usw.) für jeden Frame aufrufen und sicherstellen, dass vsync deaktiviert ist. Wenn Sie meinen, dass die Größe des Fensters geändert werden soll, ist das keine offene Frage, sondern auch das Windowing-System.