- varying vec2 texCoord;
- void main(void)
- {
- // Transformation (Modelview und Projection)
- gl_Position = ftransform();
- // Texturkoordinaten
- gl_TexCoord[0] = gl_MultiTexCoord0;;
- }
DGL https://delphigl.com/forum/ |
|
Gauss-Shader https://delphigl.com/forum/viewtopic.php?f=20&t=7433 |
Seite 1 von 1 |
Autor: | Seth [ Di Apr 15, 2008 15:29 ] |
Betreff des Beitrags: | Gauss-Shader |
hi, dieses Mal kein Problem, sondern einfach nur einen Shadercode den ich posten möchte. Vielleicht kann ihn sich jemand noch einmal durchsehen, dann könnte er nämlich ins wiki. Es handelt sich um einen Gauß-Shader. Die Standardabweichung lässt sich mittels uniform übergeben und die Größe der Filtermatrix lässt sich im Shader einstellen. (Vielleicht gibt es ja auch hier eine Möglichkeit diese zu übergeben) Des weiteren muss noch die Texturgröße via width und height übergeben werden. Vertex-Shader: Code:
Fragment-Shader: Code:
Sicherlich lässt sich da noch einiges optimieren, zumal die Gauß-Matrix hier ständig neu berechnet werden muss, vielleicht ließe sich dies auch irgendwie auf das Programm auslagern. mfg |
Autor: | Lord Horazont [ Di Apr 15, 2008 15:51 ] |
Betreff des Beitrags: | |
Hast du das ding mal ausprobiert, so wegen performance und so? So wie das aussieht, wird das seeehr langsam sein, weil er jeden Frame die Matrix neu berechnet, noch dazu haben wir hier kernelsize² Texturzugriffe, was auch nicht gerade harmlos ist... Gruß Lord Horazont |
Autor: | Seth [ Di Apr 15, 2008 16:56 ] |
Betreff des Beitrags: | |
Ja, sonderlich schnell ist es wirklich nicht und wirklich großflächige Blurs sind damit nicht möglich. Ich habe irgendwo gelesen, dass man das Ganze allerdings stark optimieren kann, indem man erst Horizontal und dann Vertikal (oder umgekehrt) blurrt. Wie stelle ich das an ? (die Gauß Matrix werde ich dann wohl entweder statisch machen oder mir etwas anderes überlegen ^^) mfg |
Autor: | Lord Horazont [ Di Apr 15, 2008 18:06 ] |
Betreff des Beitrags: | |
Nun, um erst horizontal und dann vertikal zu blurren, brauchst du entweder zwei Shader oder einen Shader mit einer If (nicht sehr gut auf älteren Karten), auf jeden Fall aber brauchst du zwei Renderpasses. So in der art: Code:
Welcher der beiden Shader jetzt horizontal und welcher vertikal blurrt, ist deine Entscheidung. Der Blur läuft ansonsten ganz normal ab, nur dass du anstatt kernelsize² "nur" kernelsize Texturzugriffe hast und der Shader auch auf älteren karten, wo die Schleife entrollt werden müsste, noch eine Chance hat durch den Maximal Instruction-Filter durchzukommen ![]() Gruß Lord Horazont |
Autor: | Seth [ Mi Apr 16, 2008 12:26 ] |
Betreff des Beitrags: | |
hi, das scheint in der Praxis ganz gut zu funktionieren. Ich nutze allerdings momentan eine Textur in die ich rendere. Lande aber gerade einmal bei 30fps, fast unabhängig von der Texturgröße, hat also vielleicht nichts mit dem Shader zu tun. mfg |
Autor: | Lord Horazont [ Mi Apr 16, 2008 17:49 ] |
Betreff des Beitrags: | |
Es könnte daran liegen, dass dein Shader in Softwaremodus gehauen wird, wegen den vielen Texturzugriffen und instruktionen. Und wenn du eine Textur nutzt, in die du renderst sehe ich gerade kein Problem, eine Horizontal/Vertikal Lösung zu verwenden oder reden wir da gerade aneinander vorbei? Gruß Lord Horazont |
Autor: | Seth [ Mi Apr 16, 2008 18:39 ] |
Betreff des Beitrags: | |
nein, genauso mache ich es ja momentan ![]() die shader sind nicht sehr lang, wie kann ich überprüfen ob der im SW modus läuft ? Das hier ist der horizontale, der vertikale sieht genauso aus: Code:
height und step_h kann ich in diesen fall ja entfernen ![]() mfg // Edit Lossy: Matrix umgebrochen. Geht von der Seitenbreite ja nicht mal auf einem 24"er. |
Autor: | Pellaeon [ Do Apr 24, 2008 07:12 ] |
Betreff des Beitrags: | |
Ich glaube garnicht, das wurde doch schon öfters gefragt, oder? Auf jeden Fall dürfte es in der Performance doch was gebracht haben, dass du nicht in jedem Durchlauf die Gauß-Matrix berechnest. Das war sicher mit der größte Flaschenhals |
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |