Ich frage mich, ob das Aufrufen von updateGL () in festen Timer-Intervallen den Renderprozess verlangsamen kann. Also, ich möchte versuchen, den Render in Echtzeit zu machen. Ich habe nicht die Funktion, es automatisch ausführen zu lassen. Wer weiß das?
zweitens habe ich updateGL () in meinem Programm kommentiert, CPU-Auslastung auf 1% und 0% reduziert. Jetzt, wenn ich auf das Display-Widget klicke, springt es auf 14%, warum? macht nicht die GPU den gesamten Rendering-Job? Wenn ja, warum springt die CPU auf 14? Wie kann ich das beheben?
Ja, Sie können es in Echtzeit erstellen, ohne zu reißen (z. B. bei genau 60 fps, die Bildwiederholfrequenz Ihres Monitors).
Dazu müssen Sie V_sync aktivieren und QTimer timer;
von Intervall 0 verwenden. Wenn Sie V_sync aktivieren, wird der Befehl swapBuffers()
automatisch an die CPU gesendet. Warten Sie auf das vertikale Refresh-Signal von Ihrem Monitor. Dann wird der Timer tatsächlich mit der Aktualisierungsrate des Monitors synchronisiert.
Eine ähnliche Information finden Sie hier: Ссылка . Beachten Sie die QGLFormat::setSwapInterval(1)
, um V_sync zu aktivieren, wenn dies nicht automatisch von Ihren Treibereinstellungen vorgenommen wird:
Parallel dazu können Sie QElapsedTimer
ausführen, um zu messen, wie viel Zeit zwischen zwei Zeichnungen verstrichen ist (normalerweise ca. 16,6 ms). Verwenden Sie diese Informationen, um beispielsweise Ihre Szene zu aktualisieren.