DGL
https://delphigl.com/forum/

Vertex Shader: Texturelookups extrem langsam
https://delphigl.com/forum/viewtopic.php?f=20&t=6438
Seite 1 von 1

Autor:  .:Nico:. [ So Mär 11, 2007 15:20 ]
Betreff des Beitrags:  Vertex Shader: Texturelookups extrem langsam

Hallo,

ich versuche mich an einem auf der GPU berechneten Partikelsystem und habe mich an eurem Tutorial im Wiki (GLSL_Partikel) versucht. Es funktioniert soweit auch alles, aber ich bekomme auf meinem System (Athlon64 3200 - Geforce 7800GS) nur ~6 FPS.
Gerendert werden 65536 Point Sprites, die ich in einem VBO abgelegt habe. In den Vertex-Koordinaten speichere ich die Texture-Koordinaten der Partikel für die Texture "Part" in der die Position der Partikel gespeichert sind.

Nach einigem Nachforschen habe ich die Weiterverarbeitung der aus der Textur gelesenden Werte im Vertex Shader als ultimativen Performancekiller ausgemacht.

In seiner minimalsten Form sieht der Vertex Shader so aus:
Code:
  1. uniform sampler2D Part;
  2.  
  3. void main(void)
  4. {
  5.    vec4 look = texture2D(Part, vec2(gl_Vertex.x, gl_Vertex.y)) - vec4(0.5, 0.5, 0.5, 0.0);
  6.    gl_Position = gl_ModelViewProjectionMatrix * look;
  7.  
  8. }
  9.  

Das Problem ist die letzte Zeile. Nehme ich für "look" z. B. vec4(0.0) habe ich volle 60 Frames (irgendwie begrenzt der Treiber alle 3D-Applikationen auf 60 FPS). Oder ich lasse den Texturelookup (texture2D(...)) weg, dann habe ich auch volle 60 FPS.

Die Textur wird korrekt an den Shader übergeben, zumindest wird sie richtig auf die Partikel gezeichnet wenn ich im Pixelshader gl_FragColor = texture2D(Part, vec2(0.0) angebe. (Die Texturekoordinaten sind egal, da sie durch glTexEnvf(GL_POINT_SPRITE, GL_COORD_REPLACE_ARB, GL_TRUE); ersetzt werden.)

Also ich habe atm nicht den blassesten Schimmer warum das soviel Performance zieht :cry:

Nico

Autor:  LarsMiddendorf [ So Mär 11, 2007 16:47 ]
Betreff des Beitrags: 

Die Texture muss als internes Format RGBA32F_ARB oder INTENSITY32F_ARB haben. Im Artikel sind 16 Bit angegeben. Die Hardware unterstützt nur 4 oder 1 Komponente mit jeweils 32 Bit float.

Entsprechende Informationen:
ftp://download.nvidia.com/developer/Pap ... xtures.pdf

Autor:  .:Nico:. [ So Mär 11, 2007 21:54 ]
Betreff des Beitrags: 

Ahhh...das ist's gewesen :)
Jetzt läuft es wunderbar flüssig.
Vielen, vielen Dank.

Gruß Nico

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