Ich muss einige Augenweiden des Partikelsystems beschleunigen, an denen ich gerade arbeite. Die Augenweide beinhaltet additive Blending, Akkumulation, und Spuren und glühen auf die Partikel. Im Moment bin ich Rendering von Hand in eine Fließkomma-Bildpuffer, Konvertierung in vorzeichenlose Zeichen in der letzten Minute dann hochladen, um eine OpenGL-Textur. Um das Glühen zu simulieren, rendere ich dieselbe Textur mehrmals in verschiedenen Auflösungen und mit verschiedenen Offsets. Dies erweist sich als zu langsam, so bin ich auf etwas zu ändern suchen. Das Problem ist, meine Dev-Hardware ist eine Intel GMA950, aber die Zielmaschine hat eine Nvidia GeForce 8800, so ist es schwierig, OpenGL Sachen in diesem Stadium zu profilieren.
Ich habe einige sehr unwissenschaftliche Profilerstellung und fand heraus, dass die meisten der Verlangsamung kommt aus dem Umgang mit dem Float-Bild: Skalierung alle Pixel durch eine Konstante, um sie auszublenden, und Konvertierung der Float-Bild zu vorzeichenlosen Zeichen und Hochladen auf die Grafik-Hardware. Also, ich bin auf der Suche nach den folgenden Optionen für die Optimierung:
- Ersetzen von Floats durch uint32s in einer Festkomma-Konfiguration 16.16
- Optimierung von Float-Operationen mit SSE2-Assembler (Bildpuffer ist ein 1024*768*3-Array von Floats)
- Verwenden Sie OpenGL Akkumulationspuffer anstelle von Float-Array
- Verwenden Sie OpenGL Fließkomma-FBOs anstelle von Float-Array
- OpenGL-Pixel/Vertex-Shader verwenden
Haben Sie Erfahrungen mit einer dieser Möglichkeiten? Irgendwelche Gedanken, Ratschläge? Gibt es noch etwas, an das ich nicht gedacht habe?
0 Stimmen
Das klingt sehr fortschrittlich, gibt es eine Möglichkeit, einen Screenshot zu sehen?