Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 08:51

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: glCopyTexImage2D macht merkwürdiges
BeitragVerfasst: Mi Sep 08, 2010 11:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
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:
Code:
glViewport(0, 0, m_viewport.x, m_viewport.y);
glGenTextures(1, &m_framebufferTex);
glBindTexture(GL_TEXTURE_2D, m_framebufferTex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 0, 0, m_viewport.x, m_viewport.y, 0);


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.
Code:
m_framebufferTex = bindTexture(grabFrameBuffer());


Irgendwelche Ideen? Ist wahrscheinlich irgendwas ganz dummes...also nur her mit den Vorschlägen egal wie blöd sie euch erscheinen mögen.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 08, 2010 11:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 04, 2008 23:15
Beiträge: 39
Wohnort: Oberösterreich
Programmiersprache: ObjPas, C, DivASM
Nur eine Vermutung. Aber vielleicht stimmen die UNPACK_ Parameter nicht.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Sep 08, 2010 12:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@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 :)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 17 Queries | GZIP : On ]