Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

1

10.10.2013, 13:47

FBO lässt sich nur einmal binden?

Moin.
Ich spiele derzeit etwas mit OpenGL 3 rum und wollte mir mal FBO's angucken. Soweit so gut, aber es scheint mir so, als würde ein FBO nur ein Weg-werf Konstrukt sein.
Ich generiere einen, hänge ein Bild ran, zeichne drauf, aber sobald ich es entbinde und dann erneut irgendwann binden will, um wieder darauf (oder auf einer neuen Textur) zu zeichnen, klappt es nicht. glGetError wirft auch keinen Fehler und der eigentliche bind Aufruf klappt auch ohne Probleme. Aber trotzdem will dieses störrische Ding nicht so wie ich will.
Mal zur Verdeutlichung mein Aufruf Code:

Quellcode

1
2
3
4
5
6
7
8
    FrameBufferObject fbo = new FrameBufferObject(fbo_img1);
    fbo.bind();
    fbo.draw(va_many);
    //fbo.unbind();
    fbo.bind();
    fbo.setTexture(fbo_img2);
    fbo.draw(circle2);
    fbo.unbind();

(Was jetzt hinter fbo_imgX oder circle2/va_many steckt ist völlig unwichtig.)

Dieser Code produziert dieses Bild:

(Link)

Alles wie es soll, einmal schwarze Rechtecke und einmal ein schwarzer Kreis.

Doch entferne ich den Kommentar bei //fbo.unbind(); dann sehe ich nur so etwas:

(Link)

Die zweite Textur bekommt ihren Kreis nicht.

Meine Frage ist jetzt: bin ich blöd, ist das beabsichtigt und somit Standardverhalten oder was ist verkehrt?

Meine FBO Klasse sieht folgendermaßen aus (nicht schön aber ist ja auch nur Spielerei): http://codepad.org/vwUQgCce
Falls jemanden das glCheck interessiert, das ist hier zu finden: http://codepad.org/LDtJS2lM

Hoffe mir kann jmd. was sagen, ich bin verflixt neugierig. :)
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

10.10.2013, 14:37

Also ich habe mir den Code jetzt nicht komplett angeschaut.
Du mischt aber die OpenGL 3 Framebufferbefehle mit "GL_EXT_framebuffer_object"-Befehlen.
Möglicherweise kann das solche Probleme verursachen.
Man sollte entweder die Core-API oder die Extension nutzen aber nicht beides durcheinander.
Da du OpenGL 3 nutzen willst, hat die Extension bei dir nichts mehr verloren.
(Für maximale Kompatiblität empfiehlt es sich aber auch, beides zu unterstützen und dann zur Laufzeit auszuwählen)
Ich mag das DelphiGL-Wiki sehr gerne, aber gerade wenn es um neuere Sachen geht, sollte man doch auch noch eine andere Quelle verwenden.
Zb. OpenGL.org/wiki/Framebuffer_Object oder die API Doku direkt.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

10.10.2013, 14:49

Zumindest Konsistenz wäre sicher hilfreich zwischen

glBindFramebuffer(GL_FRAMEBUFFER
und
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

10.10.2013, 15:17

Nein normal ist das nicht. Entweder es liegt am mischen, wie bereits erwähnt oder du clearst den Colorbuffer nicht?
Ich kann dir ja einfach mal meine FBO Klasse geben, total simpel: http://pastebin.com/TXtdLif9

Architekt

Community-Fossil

  • »Architekt« ist der Autor dieses Themas

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

5

10.10.2013, 15:25

Jop, lag am mischen. Wie dumm. :) Danke.

@DeKugelschieber: Danke, ich werfe mal einen Blick drauf.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Werbeanzeige

Ähnliche Themen