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:
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
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.
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.