Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 19, 2025 09:35

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: So Mär 11, 2007 15:20 
Offline
DGL Member

Registriert: Do Feb 23, 2006 15:48
Beiträge: 12
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mär 11, 2007 21:54 
Offline
DGL Member

Registriert: Do Feb 23, 2006 15:48
Beiträge: 12
Ahhh...das ist's gewesen :)
Jetzt läuft es wunderbar flüssig.
Vielen, vielen Dank.

Gruß Nico


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]