Diskussion:shader blur2
Aus DGL Wiki
Version vom 23. Dezember 2009, 15:56 Uhr von Coolcat (Diskussion | Beiträge)
Da an dem anderen Blur Shader scheinbar seit Ewigkeiten nichtsmehr gemacht wird hab ich einfach mal diesen hier erstellt. Fragen, Anregungen, Verbesserungsvorschläge? --Skeptiker 22:25, 22. Dez. 2009 (CET)
- Der Shader ist sehr gut, bei meinem Vorschlag in diesem Thread habe ich nämlich nicht berücksichtigt, dass die Convolution-Operation kommutativ und assoziativ ist. Der Gauss-Filter ist deshalb nämlich separierbar. Wenn man Rundungsfehler vernachlässigt spielt es beim Ergebnis keine Rolle, ob man einen 2D-Gauss anwendet oder die Operation zweimal mit einem horizontalen bzw. vertikalen 1D-Gauss durchführt. Die zweite Variante spart aber eine große Menge an Texturzugriffen. In diesem Fall 7*7=49 Zugriffe beim 2D-Gauss gegen 2*7=14 Texturzugriffe beim zweimaligen 1D-Gauss. Das macht um so mehr aus, je größer der Filter ist. Eigentlich sollte ich solche Dinge besser wissen.
Ok, was zu meckern habe ich natürlich auch ;)- Du musst die Ränder der Textur in irgendeiner Form korrekt behandeln. Das kann beispielsweise dadurch geschehen das man GL_TEXTURE_WRAP_* auf GL_CLAMP_TO_EDGE oder GL_CLAMP_TO_BORDER setzt. Sollte man vielleicht erwähnen.
- Das Array gaussFilter sollte const sein, ich bin mir nicht sicher ob der Shader-Compiler so schlau ist selbst zu bemerken, dass er nur einmal Speicher reservieren muss.
- Ansonsten kann man, wie du schon selbst sagst, an der Fallunterscheidung natürlich noch etwas feilen, aber dann wäre der Shader wahrscheinlich nicht mehr so leicht zu lesen.
- --Coolcat 11:06, 23. Dez. 2009 (CET)
- Sollte es nicht float(i - 3) sein? Der Index i läuft von 0 bis 6, damit läuft i-4 von -4 bis 2. Oder habe ich gerade nen Knoten drin? --Coolcat 15:56, 23. Dez. 2009 (CET)