Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
ich habe das Tutorial bezüglich der FrameBufferObjekte durchgearbeitet und eine dazu passende Komponente entwickelt. Leider bekomme ich beim Anlegen des Objekts in der Funktion CheckFBO immer den Fehler >> GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT <<, so dass die Komponente nicht korrekt angelegt wird. Meiner Meinung nach habe ich alles so umgesetzt wie vorgegeben. Ich habe auch die Existenz der Erweiterung abgeprüft, bekomme den Fehler aber trotzdem.
Kann mir jemand weiterhelfen?
Danke,
Andree
___________________ Hier die Abprüfung der Extension: ___________________
Code:
var
FBO: TFrameBufferObject;
.
.
.
if CheckGLExtension ('GL_EXT_framebuffer_object')thenbegin
FBO := TFrameBufferObject.Create(512,512);
endelsebegin
FBO :=nil;
raise Exception.Create('Spiegelanzeige ist nicht möglich, da die'+#10+#13+
'Grafikkarte dies nicht unterstützt.');
end;
.
.
.
function TFMain.CheckGLExtension(cExt:string):boolean;
var
cGLExt:string;
begin
result :=false;
cGLExt := glGetString (GL_EXTENSIONS);
if UpperPos (cExt, cGLExt) > 0thenbegin
result :=true;
end;
end;
___________________ Hier die Komponente: ___________________
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich habe mit FBOs noch nicht so viel gemacht, erinnere mich aber, dass man Texturen, die als Puffer fungieren, nicht gebunden haben sollte... Mal ein glBind(GL_TEXTURE_2D, 0); vorm CheckFBO versucht?
greetings (*schuss ins blaue*)
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich denke nicht, dass es Probleme mit der Erweiterung gibt. Also wenn deine Grafikkarte FBOs nicht könnte, dann würde bereits der Befehl glGenFramebuffersEXT eine Zugriffsverletzung werfen. Weil die Funktionen erst dann existieren wenn deine Karte sie auch kann.
Also spontan kann ich nur eines finde woran sich eine empfindliche OpenGL Implementation stören könnte. Und zwar nimm mal als Format (Siebte Parameter/Zweite GL_RGB8 ) bei glTexImage2D GL_RGB und nicht GL_RGB8. Weiß nicht ob deine OpenGL Implementation da irgendwie empfindlicher ist. Ist vielleicht sogar auch ein bisschen an den Haaren herbeigezogen.
Falls das nichts ändernt kannst du mal folgendes versuchen. - RGBA8 als Texturformat. Grafikkarten mögen 32 Bit Alignment. - Überall mit glGetError auf Fehler prüfen. Wenn du irgendwo eine falschen Konstante rein reichst, dann sorgt das natürlich dafür, dass das FBO nicht funktioniert. Allerdings sieht man nicht ob ein Befehl eventuell einen Fehler geworfen hat. Also so etwas wie glBegin(GL_RGB) wird von OpenGL verworfen, weil er es nicht auswerten kann. Dein Programm wird aber trotzdem ganz normal weiter laufen. Allerdings wird in OpenGL ein Fehler gesetzt. Den kann man mit glGetError abfragen. Das solltest du dann idealerweise mit in dein Log Schreiben. Also nach jedem Befehl. Oder kombinieren. Also dein Writelog nach dem OpenGL Befehl aufrufen und das Ergebniss von glGetError direkt übergeben und gleich zusammen wegschreiben.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo Lossy Ex,
war nicht an den Haaren herbeigezogen. Da ich in unterschiedlichen Tutorials und Beispielen für diesen Parameter auch unterschiedliche Einstellungen gefunden hatte, habe ich anscheinend einiges durcheinandergebracht. Der Fehler ist jetzt weg, dafür ist mein Bildschirm schwarz. Wo ich vorher umherfliegende Kacheln sah, ist jetzt nur noch eine schwarze Fläche. Welche Einstellung muss ich den sichern und wiederherstellen? Ich habe glPush- und Popmatrix und glPush- und PopAttrib mit GL_ALL_ATTRIB_BITS probiert. Bringt null und nix.
Ich sehe nichts.
Danke,
Andree
------------------- Hier der neue Code: -------------------
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Dazu wäre interessant zu wissen, wie du überhaupt zeichnest und was du mit deinem FBO anstellst. Wenn du da reingezeichnet hast, musst du das noch irgendwo wieder aufbringen, als Textur. Ist ja meistens der Sinn der Übung.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo Lord,
bisher zeichne ich die Textur des FBOs überhaupt nicht. Dafür habe ich aber die Methoden FBO.PrepareRender und FBO.FinishRender vorgesehen. Die dann geschriebene Textur kann man mit der Methode FBO.Bind aktivieren. Mein Bildschirm bleibt schwarz, wenn ich das Objekt anlege, also die Methode FBO.Create (512, 512) aufrufe. Alle meine bisherigen Zeichenanweisungen, die funktionieren wenn ich das Objekt nicht anlege, sind dann wirkungslos.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ah, das könnte damit zusammenhängen, dass du beim Erzeugen das VBO zwar bindest (»glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);«), aber später nicht wieder entbindest, mit: glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
das sollte helfen, nach CheckFBO wäre das angebracht.
Denn solange das FBO gebunden ist, wird dort auch reingerendert. Zumindest meines Wissens nach.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Danke,
das war es. Jetzt werde ich meine Klasse austesten und wenn die jemanden interessiert, kann er sich die dann hier abholen. Bisher sieht alles prima aus. Sollten sich noch etwaige Änderungen ergeben, werde ich die hier veröffentlichen.
Registriert: Do Jun 09, 2005 13:48 Beiträge: 117 Wohnort: Sankt Augustin
Hallo,
ich bin soweit fertig. Da ich leider hier keine ZIP-Datei anhängen kann, habe ich die fertige Software (EXE) als Archiv auf meine Homepage gestellt. Wer mich kontaktiert, bekommt auch den Sourcecode. Direkter Link zum Download: http://www.heyroths.de/main.html?src=%2F#2,3 Diese Anwendung ist nur als Test für die neue Klasse und weitere meiner Versuche gedacht. Trotzdem viel Spaß,
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.