Ich mache eine Menge Textur-Upload (60 VGA-Bilder pro Sekunde) und es blockiert meinen UI-Thread. Von the Qt 5.1 QGLWidget manual page (Hervorhebung von mir):QGLWidget in einem anderen Thread? Worauf bezieht sich die Dokumentation?
Textur hochladen in einem Thread. Das Hochladen von Texturen in einem Thread ist möglicherweise sehr nützlich für Anwendungen, die große Mengen von Bildern verarbeiten, die angezeigt werden müssen, wie beispielsweise eine Fotogalerieanwendung. Dies wird in Qt durch die vorhandene bindTexture() API unterstützt. Eine einfache Möglichkeit besteht darin, zwei freigegebene QGLWidgets zu erstellen. Einer wird im Haupt-GUI-Thread aktuell gemacht, während der andere im Textur-Upload-Thread aktuell gemacht wird. Das Widget im Upload-Thread wird nie angezeigt, es wird nur zum Teilen von Texturen mit dem Haupt-Thread verwendet. Informieren Sie den Hauptthread für jede Textur, die über bindTexture() gebunden ist, damit er die Textur verwenden kann.
Was? Wie kann eine QWidget-basierte Klasse wie ein QGLWidget in einen Thread verschoben werden? Der Versuch, dies zu tun, führt zu:
QObject::moveToThread: Widgets cannot be moved to a new thread
Ich verstehe nicht, was die Dokumentation schlägt ich implementieren, um z. bindTexture()
Ausführung aus dem UI-Thread.
Dies auch hier erwähnt wird: Qt4/Opengl bindTexture in separated thread
kein Code geschrieben, obwohl es.
Yep. Weitere Informationen [hier] (http://blog.qt.digia.com/blog/2011/06/03/threaded-opengl-in-4-8/). In Qt 5 sollten Sie QOpenGL * -Klassen und nicht QGL * -Klassen verwenden, wo dies möglich ist. – peppe