Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Was spricht gegen glGetTexImage? Das wird zwar nicht viel schneller sein als glReadPixels, aber die Daten müssen nunmal von der Grafikkarte her kommen.
grüße
_________________ 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: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
zum Verkleinern könntest du das Original einfach in ein kleineres FBO rendern und dann die Daten des FBOs mit glGetTexImage auslesen. Alternative: Hab ich noch nie probiert, könnte aber funktionieren. Erstell nen 2. Context in nem extra Thread. Aktivier das Sharing von Objekten zwischen den Contexten und hol dir deine Texture dann ganz gemütlich im 2. Thread ab. Der erste kann in der Zeit weiter arbeiten. Inwieweit der Zugriff auf die Texturen gesynct werden muss weiß ich nicht. Wenn du Glück hast macht das der Treiber für dich. Zur Not einfach 2 FBOs und dann alternierend, wie das schon erwähnt wurde.
Registriert: Di Apr 29, 2008 18:56 Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
ob du die Daten nun aus dem FBO oder aus dem normalen FrameBuffer ließt ist egal, es ist beides ein normaler Buffer, sollte also weitestgehend gleichschnell sein. Du brauchst das Ganze doch für dein Ambi-Light, oder? Dann sollte es doch reichen, wenn du nur die Ränder der Textur ausließt. Außerdem kannst du das FBO in einer viel kleineren Auflösung rendern bzw. könntest du ein zweites FBO erstellen und das erste FBO mit einem Blur Shader in das zweite kleinere reinrendern, das ergibt denke ich eine bessere Ausgangstextur für das Ambi-Light. Wenn du dann noch mit 2 (oder sogar 3) alternierenden FBOs und einem zweiten (oder dritten) Context und Thread arbeitest, der die Daten aus den FBOs ausließt, das gerade nicht gerendert wird, sollte es mehr als schnell genug sein...
Ich versteh auch nicht richtig was du da machts: - beim erstellen des Buffers: -- Zeile 18 und 19 setzen Texturdaten obwohl keine Textur gebunden ist (oder der Code ist nicht im Ausschnitt zu sehen)
- beim rendern: -- FBO binden -- Viewport und Matricen einstellen -- Texturdaten hochladen (versteh ich nich ganz, weil du ja eig welche abholen wolltest?) -- Buffer leeren und Matrix _nochmal_ zurücksetzen -- Texturdaten nochmal hochladen (warum?) -- Framebuffer entbinden obwohl nix gezeichnet wurde (?) -- Quad mit Textur rendern -- Rendern abschließen und Bild ausgeben
Kurz gesagt: Du nutzt dein FBO gar nicht. Zumindest nicht in dem Code der hier steht. Vlt könntest du hier nocheinmal kurz beschreiben was genau du eig vorhast, wo kommen die Daten her (was steht in VisInfo^.VisBuf), was soll gerendert werden, welche Daten sollen wohin exportiert werden? Dann können wir die vlt besser helfen. Vlt gibts für dein Problem auch ne andere Herangehensweise
Mitglieder in diesem Forum: Bing [Bot] und 75 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.