2017-01-03 2 views
-1

Ich versuche, DOF-Effekt in meinem Shader zu implementieren. Im Shader habe ich Farbtextur + Offset für Unschärfe. Ich muss Offset für RGB und meinen eigenen A-Kanal hinzufügen, den ich im Shader vorher mache. Wie kann ich den Alpha-Kanal in einem Schritt ersetzen? Ich kann unter GLSL-Funktionen nichts Passendes finden. Vielen Dank!Ersetzen Alpha für Textur in den Shader

+0

Das ist nicht sehr klar, möchten Sie aus der Textur probieren und einen neuen Wert in seinem Alpha-Kanal speichern, alles in einem einzigen Shader? – pleluron

+0

** pleluron ** Ja, das ist! Nicht schwierig für mich, dies außerhalb des Shaders zu implementieren, aber interessant, wie das gelöst werden kann. – OpenglNoob

+0

Welche Version von OpenGL verwenden Sie? – pleluron

Antwort

1

Ja, es ist möglich, Texturen (oder Bilder) als Eingabe und Ausgabe zu verwenden, aber Sie sollten es nicht tun.

Der OpenGL-Treiber muss wissen, was eine Eingabe und was eine Ausgabe ist, damit die Operationen ordnungsgemäß synchronisiert werden können (z. B. sollte ein Lesevorgang auf einer Textur auf die gleiche Textur warten ...)

OpenGL 4.2 stellt Bild Load/Store, eine Art des Lesens und Bilder zu schreiben, aber Sie haben die Synchronisation selbst verwalten (mit barrier() und *Barrier() Anrufe). Es ist für Daten gedacht, die sowohl gelesen als auch geschrieben werden müssen, z. Atomzähler, Transparenzwerte ...

In Ihrem Fall gibt es zwei Datensätze: Farben und Offsets. Der eine wird nur gelesen und der andere nur geschrieben. Es ist besser, die beiden einfach zu trennen und sie einfach als reguläre Ein-/Ausgaben zu behandeln (Texturbindung/FBO-Anhang). Wenn Sie für die zwei Mengen eine Textur verwenden, wird diese als eine zu synchronisierende Entität behandelt, was zu mehr Wartezeiten an anderer Stelle führt.

Verwandte Themen