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

Aktuelle Zeit: Di Mai 14, 2024 09:38

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Frage zu FBOs
BeitragVerfasst: Mo Apr 22, 2013 02:09 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hallo allerseits,
Ich habe mit einem FBO etwas Postprocessing betrieben, und habe mir dabei überlegt, ob ich auf die Textur, in die geschrieben wird auch zugreifen kann, während ich die Szene in dieselbe Textur zeichne. Hab es ausprobiert, und es scheint auch was drin zu sein, aber scheinbar nur ein Teil,
die gerenderte Textur ist mit quadratische löchern gespickt.
Was muss ich beachten? Brauche ich dazu 2 FBOs?

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu FBOs
BeitragVerfasst: Mo Apr 22, 2013 02:21 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Der Grund, weshalb ich die Textur in der Scene haben will, in der Sie erzeugt wird ist folgender.
Ich hätte gerne ein Datenpaket (hier in Form der Textur), dass ich mittels Pixelshader fortlaufend verändern kann, und dabei auf das gesamte Paket zugreifen kann, z.B. für die Berechnung von zeitlichen Entwicklungen von irgendwelchen gekoppelten Systemen.
Für andere Möglichkeiten hierzu bin ich natürlich offen.

Grüße
Vinz

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu FBOs
BeitragVerfasst: Mo Apr 22, 2013 06:28 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Ich gehe mal davon aus, dass du zwei Threads hast, die beide gleichzeitig auf die Textur zugreifen sollen, einer davon soll sie verändern.

Du müsstest vorher die Textur in ein zweites FBO kopieren.

Wichtig dabei wäre, dass du beide FBO's am Anfang erstellst und dann am Ende des Berechnungsthreads, das Berechnungsfbo in das Renderfbo kopierst. So sollte es auf jeden Fall gehen.

EDIT:

Wenn du Pixelshader nutzt, kannst du doch die Parameter des Pixelshaders jeden Frame/mitten im Frame verändern. Dann geht es auch. aber eben nur mit dem was gerendert wird ;)

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu FBOs
BeitragVerfasst: Mo Apr 22, 2013 07:21 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hey,

end hat im Grunde Recht, allerdings musst du das FBO nicht zwingend kopieren.
Du musst nur sicher stellen, dass du nicht gleichzeitig schreibst und liest (siehe https://www.opengl.org/wiki/Framebuffer ... back_Loops).

Du könntest auch versuchen 2 Texturen an das FBO zu binden und eine zum Schreiben, die andere zum Lesen zu benutzen und die nach jedem gerenderten objekt einfach tauschen. Das geht natürlich nur wenn deine Objekte so aufgebaut sind, dass sie es dir erlauben die komplette Textur zu kopieren (fullscreen quads).

Eine weitere Alternative wäre Transform Feedback. Damit kannst du die Ausgabe von Vertex Shadern in buffer objects auslesen (ähnlich wie Texturen für Fragment Shader).
Ein Beispiel dafür findest du hier GLSL_Partikel_2.

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu FBOs
BeitragVerfasst: Mo Apr 22, 2013 15:11 
Offline
Compliance Officer
Benutzeravatar

Registriert: So Aug 08, 2010 08:37
Beiträge: 460
Programmiersprache: C / C++ / Lua
Das Problem ist doch, dass wenn man ein Teil der Textur liest, dann verändert und dann wieder liest, man nie eine komplett veränderte Textur hat, sondern immer nur Teile aus verändertem und unverändertem (wenn man nicht das Glück hat, dass die Threads gleich schnell sind, die Wahrscheinlichkeit hierfür ist jedoch gering ;) )

_________________
offizieller DGL Compliance Beauftragter
Never run a changing system! (oder so)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Frage zu FBOs
BeitragVerfasst: Di Apr 23, 2013 00:56 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Danke für die Antworten!
Ich hab mich für die Pingpong-Methode mit zwei Texturen entschieden, also von Frame zu Frame, die Lese- und Schreib-Textur gegeneinander auszutauschen, klappt bestens.
Endlich mal zeitliche Entwicklung innerhalb der Grafikkarte, wollt ich schon lang mal haben.
Und mit Floatingpointtexturen kann man damit einiges ausrechnen!

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.037s | 17 Queries | GZIP : On ]