2016-03-27 6 views
0

Ich aktualisiere meine Anwendung von QGLWidget mit Qt 5.3.2 auf QOpenGLWidget mit QT 5.6.0. Die Anwendung wird aktualisiert und läuft gut. Ich stecke jedoch fest, um meine Debugging-Tools zu erhalten. Meine Entwicklungsumgebung ist Visual Studio 2013, und obwohl die letzte Anwendung doppelt gepufferte Grafiken verwendet, habe ich für Debugging-Zwecke einige Methoden geschrieben, die ich interaktiv vom Debugger aufrufen, in Frontpuffer zeichnen und die Ausgabe auf dem Bildschirm sehen konnte. Diese Funktionen funktionieren nicht mehr, da QOpenGLWidget zum Framebuffer zeichnet. Außerdem, bevor ich versuche, beim Aufruf von glDrawBuffer (GL_FRONT) zu zeichnen, wird glError bis 1280 (ungültige Enumeration) generiert. Zusätzliches Datenelement - glGetIntegerv (GL_DRAW_BUFFER, & my_val) gibt 0x8ce0 zurück, was GL_COLOR_ATTACHMENT0 ist und mit GL 3.0 Sinn ergeben würde, obwohl meine Absicht darin bestand, GL-Features auf 2.0 zu beschränken.So zeichnen Sie mit QOpenGLWidget in den Frontpuffer

+0

QOpenGLWidget bezieht sich auf einen Intermediate FBO, benötigt daher OpenGL 3/OpenGL 2 + FBO/OpenGL ES 2 und bietet keinen Zugriff auf den Zeichenpuffer "GL_FRONT". Wenn Sie das wirklich brauchen, verwenden Sie stattdessen 'QOpenGLWindow' +' createWindowContainer'. – peppe

+0

Danke für den Vorschlag. Es klingt, als würde es ziemlich viel Arbeit erfordern. – LRaiz

+0

@peppes Vorschlag erwies sich (meistens) als gut. Es gibt immer noch ein Problem mit dem Tastaturfokus, aber ich bin nicht sicher, wie ich es überwinden soll. http://stackoverflow.com/questions/37196155/how-to-direct-keyboard-input-qopenglwindow-in-5-6 – LRaiz

Antwort

0

Kredit für die Lösung geht @peppe. Sein Vorschlag erwies sich als nicht zu schwierig zu implementieren und erlaubte mir zu erreichen, was ich wollte. Durch den Wechsel von QOpenGLWidget zu einer Kombination aus QOpenGLWindows und seinem QWidget-Container konnte ich genau das erreichen, was ich wollte.

Ich leitete meine Klasse von QOpenGLWindow ab und erinnerte sie an einen Zeiger auf ein QWidget, das über QWidget :: createWindowContainer (my_class_pointer) erhalten wurde; Dann, wann immer ich QGLWidget-Methoden nutzte, die nicht in QOpenGLWidget vorhanden sind, leitete ich diese Aufrufe an den Container um.

QOpenGLWindow scheint mit meinen Debugging-Tools, die direkt in den Frontpuffer zeichnen, vollkommen zufrieden zu sein.

Verwandte Themen