Selber Link, neues Glück!
http://www.bradan.eu/files/gpuCalc.zip (Eventuell den Cache von eurem Browser vorher leeren)
Ist hier nun 10 mal schneller als meine CPU. Jetzt können maximal 64x64x3 = 12288 Floats als ein Datensatz übergeben werden und es können bis zu 4 Datensätze verwendet werden. Und pro Fragmentshaderdurchlauf werden nun 3 Datensatz-Floats berechnet.
Desweiteren kann man nun statt nur einer Formel einen ganzen Code einbinden. In diesem Code muss die Funktion
vec3 calc(int startOffset) definiert sein. Der Parameter dieser Funktion sagt aus, welcher Indexwert des resultierenden Puffers der aktuell zu Berechnende ist.
Es gibt eine weitere Funktion:
vec3 getData(int datasetIndex, int offset). Mithilfe dieser Funktion kann man 3 Werte aus einem Datensatz holen, wobei der Index des ersten Wertes
offset ist. Der erste Parameter (
datasetIndex) bestimmt den Datensatz durch einen Index zwischen 0 und 3.
Wenn ihr euren Code prüfen wollt, könnt ihr euch sowas wie GLSLValidate von 3DLabs runterladen. Jedoch musste ich vor geraumer Zeit feststellen, dass 3DLabs (Oder jetzt ziilabs?) das Programm nichtmehr anbietet. Aber wie ich sehe ist es noch im Internet (Sucht einfach nach GLSLValidate bei Google).
Ansonsten kann ich noch sagen, dass man das mit der einfachen Formel ganz leicht nachbilden kann wenn man das Type-Casting von GLSL nicht ganz versteht:
wird zu
Code: Alles auswählen
vec3 calc(int startOffset) {
vec3 result;
vec3 dataA;
vec3 dataB;
dataA = getData(0, startOffset);
dataB = getData(1, startOffset);
// Und nun die Formel 3 mal einfügen (Weil ja 3 Floats gleichzeitig verarbeitet werden sollen):
result.x = dataA.x + dataB.x;
result.y = dataA.y + dataB.y;
result.z = dataA.z + dataB.z;
return result;
}
Hier hätte man nun schreiben können
das wäre dann effektiver gewesen. Aber wie gesagt, wenn ihr euch nicht mit GLSL auskennt ist das manchmal besser.
Das mit dem eigenen Code bringt halt den Vorteil, dass man mehr Möglichkeiten (Nicht nur in Sachen Optimierung) hat als mit einer so simplen Formel.
Ansonsten kann ich nur die Befehlsliste erneuern. Das mach ich im ersten Beitrag

. Dauert allerdings eine Weile.
Ich hoffe euch gefällts so besser.
------------------------------------------------------------------------
@Norbie: Nein, aber ich brauch dringend Motivation.