DGL
https://delphigl.com/forum/

Artefakte bei Benutzung von FBO und Shader
https://delphigl.com/forum/viewtopic.php?f=20&t=10566
Seite 1 von 1

Autor:  Lom [ Sa Aug 25, 2012 17:09 ]
Betreff des Beitrags:  Artefakte bei Benutzung von FBO und Shader

Ich wollte in ein Projekt einen Blurshader integrieren. Das ging auch alles noch gut solange ich kein FBO verwendet habe.
Aber da ein FBO einige Vorteile bringt, wollte ich das Bild erst ins FBO rendern und dann ausgeben. Hat auch alles funktioniert nur waren danach solche Artefakte zu sehen(Bei diesem Bild render ich einfach ein weißes Quad und lass dann den Shader laufen, der das ganze ausblendet und verwischt, dabei entstehen jedoch ungewollt diese Linien):
Bild
Wenn ich den Shader nicht benutze treten diese Linien nicht auf, ebenso wenn ich im Shader die Blurfunktion weglasse.
Ich habe 2 verschiedene Blurshader versucht (einen von mir und einen aus der Shadersammlung). Beide erzeugen Linien, jedoch unterschiedliche. Als ich das Programm auf einem anderen PC getestet habe, sind wieder andere Linien (meist eine Diagonale) enstanden.
Ich hoffe ich hab mich nicht zu unverständlich ausgedrückt und dass jemand vllt das Problem kennt und/oder eine Lösung weiß.

Dateianhänge:
Unbenannt.png [62.92 KiB]
Noch nie heruntergeladen

Autor:  Lord Horazont [ Sa Aug 25, 2012 17:40 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Häng das bild bitte als Anhang an, da es so nicht angezeigt wird.

grüße

Autor:  yunharla [ Di Aug 28, 2012 07:36 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

da scheint aber was ganz schön schief zu laufen, kannst du Code posten?

Autor:  Lom [ Di Aug 28, 2012 11:58 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Das mit dem Code wird ein bisschen schwer, weil der ziemlich unübersichtlich ist. Ich versuch es trotzdem Mal:
Also der Shader:
Code:
  1.  
  2. #version 120
  3.  
  4. uniform sampler2D uTexture;
  5. uniform vec2 uShift;
  6.  
  7. void main()
  8. {
  9.     vec2 texCoord = gl_TexCoord[0].xy;
  10.     vec3 color = vec3(0.0, 0.0, 0.0);
  11.     for (int i=-1;i < 2; ++i)
  12.     {
  13.     for (int j=-1;j < 2; ++j)
  14.     {
  15.     color += texture2D(uTexture,texCoord.xy+vec2(i,j)*uShift).rgb/9.0;
  16.     }
  17.     }
  18.     gl_FragColor = vec4(color,1.0)*gl_Color;
  19. }
  20.  

Autor:  yunharla [ Mi Aug 29, 2012 06:23 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

es ging mir eher ums FBO usw, der Shader selbst interessiert bei sowas eher selten :)

Autor:  Lom [ Mi Aug 29, 2012 12:56 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Aber das komische ist ja, wenn ich einen Standardshader benutze tritt der Effekt nicht auf.
Code:
  1. uniform sampler2D Texture0;
  2.  
  3. void main(void)
  4. {
  5.   gl_FragColor = texture2D(Texture0, gl_TexCoord[0].xy);
  6. }


Hier der Code mit dem ich das FBO erstelle (ein bisschen vereinfacht):
Code:
  1.  glGenFramebuffers(1, @fbo);
  2.  glBindFramebuffer(GL_FRAMEBUFFER, fbo);
  3.  glGenRenderbuffers(1, @depthbuffer);
  4.  glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
  5.  glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, Width,Height);
  6.  glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer);
  7.  glGenTextures(1, @tex);  
  8.  glBindTexture(GL_TEXTURE_2D, tex);
  9.  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  10.  glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  11.  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,  Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nil);
  12.  glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex, 0);
  13.  glBindFramebuffer(GL_FRAMEBUFFER, 0);    

Autor:  Coolcat [ Mi Aug 29, 2012 17:04 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Ist das uShift-Uniform korrekt gesetzt? Es sollte 1/texWidth bzw. 1/texHeight sein.

Autor:  Lom [ Mi Aug 29, 2012 18:26 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Ja, ist es

Autor:  damadmax [ Do Aug 30, 2012 08:23 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

Lom hat geschrieben:
der das ganze ausblendet und verwischt,


Was heisst denn "ausblendet"?

hast du evtl nur vermeintlich relevante Teile des Shaders gepostet?


Mal abgesehen davon, würde ich die Division durch 9.0 aus der Schleife rausziehen und ans Ende packen. Spart 8 Divisionen.

Autor:  Lom [ Do Aug 30, 2012 15:10 ]
Betreff des Beitrags:  Re: Artefakte bei Benutzung von FBO und Shader

damadmax hat geschrieben:
Mal abgesehen davon, würde ich die Division durch 9.0 aus der Schleife rausziehen und ans Ende packen. Spart 8 Divisionen.
Ja stimmt, ich bin noch ziemlich Anfänger bei Shadern

Ausblenden hatte ich mal im Shader, da hatte ich noch die Zeile eigefügt:
Code:
  1. color -= 0.005
aber dann hab ich das geändert und mach das jetzt außerhalb vom Shader mit glcolor3f(0.99,0.99,0.99);
und ich hab den ganzen Shader gepostet(bzw. die auskommentierten Teile weggelassen).
Und mit Ausblenden meine ich langsam alles dunkler machen, zu schwarz ausblenden.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/