Sie müssen berücksichtigen, dass GPUs beim Abrufen der Daten zum Einspeisen in die Vertex-Shader viele kleine Aufrufe erfordern, da sie nur wenige Dreiecke gleichzeitig zwischenspeichern können und das Abrufen von Daten aus dem VRAM ein sehr langsamer Vorgang ist. Wenn Sie also die Hälfte der Bytes für die Indizes verwenden, kann die GPU doppelt so viele Indizes abrufen, damit der Cache Dreiecke rendert.
4 MB Kann eine kleine Speichermenge für Speicherplatz sein. Wenn Sie jedoch einen komplexen Aufruf ausführen müssen, um nur wenige Bytes von ihnen zu verarbeiten, kann dies die Leistung spürbar beeinträchtigen. Heutzutage sind Grafikkarten leistungsstark genug, um sie in Spielen, in denen nicht viel Geometrie verarbeitet werden muss, irrelevant zu machen. Sie können einige Benchmarks durchführen, um ein Modell mit beiden Indexgrößen zu rendern, wenn Sie es wirklich wissen möchten.
Die Ladezeiten sind auch mit 16-Bit-Indizes und tatsächlich jedem Schreiben oder Lesen schneller, es sei denn, Sie können die Speicherausrichtung und das richtige Paging effektiv steuern. Es geht also nicht nur um den benötigten Speicher, sondern auch darum, wie viel es braucht, um damit umzugehen. Wenn Sie mit dynamischen Puffern arbeiten, die irgendwann zwischen Frames über den Bus zur GPU verschoben werden müssen, sollten Sie nach Möglichkeit 16-Bit-Indizes verwenden. Wenn Sie noch kleinere Geometrien rendern, können Sie viele Indizes in einem einzigen 16-Bit-Indexpuffer stapeln, damit sie alle in einem einzigen Aufruf auf die GPU kopiert werden.
Hier finden Sie einige Informationen zur Funktionsweise der neueren ATI-GPUs:
Schulungsressourcen für ATI Stream-Entwickler
(Entschuldigung, ich konnte das genaue Dokument nicht finden) Ich habe nicht viel über die NVidia-Dokumente gelesen, aber ich denke, sie funktionieren mehr oder weniger mit einem ähnlichen Ansatz.