Ich möchte den kompletten Framebuffer in eine Textur kopieren um das gleiche Bild später nochmal zu rendern. Es kommt nicht auf Performance an. Ich nutze daher einfach glCopyTexImage2D:
Ich erhalte die Textur im Anhang. Oben und rechts gibt es einen unerklärlichen dicken schwarzen Balken. Der kleine Luftbild-Ausschnitt unten links und auch die Textur selbst hat die korrekte Größe. Ich habe auch schon den Framebuffer statt auf 800x600 auf 512x512 gesetzt, auch dort erhalte ich einen schwarzen Balken, auch wenn er da anders aussieht. Scheint also kein Power-of-Two-Problem zu sein, zudem die Grafikkarte (Geforce 9800) das hinkriegen sollte. Die Viewportgröße (m_viewport) ist ebenfalls korrekt.
Auch die Qt-Alternative produziert genau das gleiche auf anderem Weg. QGLWidget::grabFrameBuffer() kopiert den Framebuffer zuerst in ein QImage, QGLWidget::bindTexture() macht dann wieder eine Textur daraus.
@humflo: Danke aber daran habe ich nicht rumgespielt, sollte also richtig sein. (Hab ich noch nie gebraucht...)
Das Problem ist mittlerweile gelöst. Es lag daran dass das QGLWidget wohl irgendwo paintGL() aufruft bevor es vollständig initialisiert ist und dann noch ein zweites mal wenn es vollständig da ist. Hab jetzt diese Konstruktion eingebaut:
Code:
static int frame = 1; if (frame < 2) { ++frame; return; } else if (frame == 2) { ++frame; runOpenGLTask(); // <- eigentliche Anwendung
glViewport(0, 0, m_viewport.x, m_viewport.y); m_framebufferTex = bindTexture(grabFrameBuffer().mirrored()); } else { // Textur rendern falls paintGL() nochmal aufgerufen wird (etwa weil das Fenster teilweise verdeckt wird, etc.) }
Dämlich, aber funktioniert...ist letztlich auch nur eine Debug-Ausgabe
Mitglieder in diesem Forum: Google [Bot] und 10 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.