glDrawElements vs glDrawArrays für Polygone, die keine Scheitelpunkte wiederverwenden

7

Ist es besser , zu verwenden glDrawElementsoder glDrawArrayswenn nicht Eckpunkten Wiederverwendung? Es muss einen Unterschied geben, sonst würden die Leute immer benutzen glDrawElements?

Ich nehme an, die Frage könnte wie folgt umformuliert werden:

Hat glDrawElementsdie gleiche Funktion wie glDrawArrayswenn es eine leere Indizes Tabelle geführt wird?

badcc
quelle

Antworten:

7

glDrawElements()unterstützt keine "leere Indextabelle". glDrawElements()Es müssen immer explizite Daten darüber angegeben werden, in welcher Reihenfolge Scheitelpunktindizes gezeichnet werden sollen, entweder mit einem Zeiger auf einen Speicherpuffer (nur OpenGL <= 2.1) oder mit einem Offset in ein gebundenes VBO.

glDrawArrays()verhält sich wie glDrawElements()würde, wenn ihm ein Array von Werten [0, 1, 2, ..., n] gegeben worden wäre, wobei 'n' der countWert ist, der an eine der beiden Funktionen übergeben wird.

Theoretisch glDrawArrays()sind weniger Daten erforderlich als glDrawElements()(da die Reihenfolge der Indizes implizit ist, anstatt dass ein Datenblock an die GPU übertragen werden muss), und daher sollte es geringfügig schneller sein, wenn Ihre Daten in diesem Format vorliegen. In der Praxis ist es jedoch unwahrscheinlich, dass der Unterschied besorgniserregend ist.

Trevor Powell
quelle
Ja natürlich. Ich hätte mich beim Schreiben nicht beeilen sollen. Mit "leere Indextabelle" meinte ich eine Tabelle mit Indizes, die keine wiederverwendeten Indizes (0, 1, 2, 3) hätte. Aber das ist genau die Antwort, nach der ich gesucht habe! Sehr geschätzt, Trevor.
Badcc