Stream Architecture

Damit die Daten der Partikel auf der Grafikkarte berechnet werden können müssen ihr diese Informationen zur Verfügung gestellt werden. Es gibt zwei Möglichkeiten:

  1. Senden von Uniform Variabeln, oder
  2. das Verwenden von Vertex-Texturen

Uniform Variabeln:
Aus einer C++ Anwendung wird dem Shader (Programm welches auf der GPU ausgeführt wird) gesendet. Das Senden der Uniform Variabeln findet auf der CPU statt.

Vertex-Texturen:
Es können Informationen in einer Textur abgelegt werden. Diese Textur wird in den Shader eingebunden und deren Inhalt kann im Shader verwendet werden. Das Senden der Textur an den Shader findet ebenfalls auf der CPU statt. Ein Zurückschreiben in die Textur welche an den Shader gesendet wurde ist nicht möglich.

Unser Ziel ist, dass die CPU nach der Initialisierung für die Berechnung nicht mehr in Anspruch genommen wird. Die Berechnung der Daten soll die GPU übernehmen.

Wie lässt sich erreichen, dass Daten auf der Grafikkarte bleiben und ein zurüschreiben der Daten in die Textur möglich ist?

  1. Es wird ein Float Array (Textur) erstellt.
    Da ein Pixel vier Kanäle hat (r, g, b, a) bildet jedes Viererpaar dieses Arrays ein Pixel der Textur
  2. Der Inhalt der Textur wird im Vertex Buffer auf ein Viereck gerendert.
  3. Dem Shader wird der Zeiger übergeben, welcher auf den Anfang (das erste Pixel des Vierecks) zeigt
  4. Im Vertex Shader kann auf den Inhalt des Quads (zum Beispiel die Position eines Partikels) zugegriffen werden (funktioniert nur mit Vertex Shader 3.0).
    Die Ausgabe des Shaders (Shader Output) kann wieder in das Viereck gerendert werden.

Die Berechnungen und deren Resultate bleiben nun stetig auf der Grafikkarte. Es kann eine GPU-Based Particle Engine realisiert werden.

Mehr Informationen über Vertex-Texturen finden Sie unter Downloads.

×