Diskussion:shader blur2: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „Da an dem anderen Blur Shader scheinbar seit Ewigkeiten nichtsmehr gemacht wird hab ich einfach mal diesen hier erstellt. Fragen, Anregungen, Verbesserungsvorschl…“)
 
Zeile 1: Zeile 1:
 
Da an dem anderen Blur Shader scheinbar seit Ewigkeiten nichtsmehr gemacht wird hab ich einfach mal diesen hier erstellt.
 
Da an dem anderen Blur Shader scheinbar seit Ewigkeiten nichtsmehr gemacht wird hab ich einfach mal diesen hier erstellt.
 
Fragen, Anregungen, Verbesserungsvorschläge? --[[Benutzer:Skeptiker|Skeptiker]] 22:25, 22. Dez. 2009 (CET)
 
Fragen, Anregungen, Verbesserungsvorschläge? --[[Benutzer:Skeptiker|Skeptiker]] 22:25, 22. Dez. 2009 (CET)
 +
:Der Shader ist sehr gut, bei meinem Vorschlag [http://www.delphigl.com/forum/viewtopic.php?f=20&p=76150 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.<br />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 <tt>GL_TEXTURE_WRAP_*</tt> auf <tt>GL_CLAMP_TO_EDGE</tt> oder <tt>GL_CLAMP_TO_BORDER</tt> setzt. Sollte man vielleicht erwähnen.
 +
:* Das Array gaussFilter sollte <tt>const</tt> 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.
 +
:--[[Benutzer:Coolcat|Coolcat]] 11:06, 23. Dez. 2009 (CET)

Version vom 23. Dezember 2009, 11:06 Uhr

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)