Diese Terminologie ist in der Geschichte von OpenGL verwurzelt. Es ist wichtig zu wissen, dass OpenGL für die meisten GL-Versionen, die hier relevant sind, schrittweise weiterentwickelt wurde, indem einer bereits vorhandenen API neue Funktionen hinzugefügt wurden, anstatt die API zu ändern.
Die erste Version von OpenGL hatte keinen dieser Objekttypen. Das Zeichnen wurde durch das Ausgeben mehrerer glBegin / glEnd-Aufrufe erreicht, und ein Problem bei diesem Modell war, dass es hinsichtlich des Funktionsaufruf-Overheads sehr ineffizient war.
OpenGL 1.1 hat die ersten Schritte unternommen, um dies durch die Einführung von Vertex-Arrays zu beheben. Anstatt Vertex-Daten direkt anzugeben, können Sie sie jetzt aus C / C ++ - Arrays beziehen - daher der Name. Ein Vertex-Array ist also genau das - ein Array von Vertices und der GL-Status, der erforderlich ist, um sie anzugeben.
Die nächste wichtige Entwicklung kam mit GL 1.5 und ermöglichte das Speichern von Vertex-Array-Daten im GPU-Speicher anstatt im Systemspeicher ("clientseitig"). Eine Schwäche der GL 1.1 Vertex-Array-Spezifikation bestand darin, dass der vollständige Satz von Vertex-Daten jedes Mal, wenn Sie ihn verwenden wollten, auf die GPU übertragen werden musste. Wenn es sich bereits auf der GPU befand, konnte diese Übertragung vermieden und potenzielle Leistungssteigerungen erzielt werden.
Daher wurde ein neuer Typ eines GL-Objekts erstellt, um das Speichern dieser Daten auf der GPU zu ermöglichen. Genau wie ein Texturobjekt zum Speichern von Texturdaten verwendet wird, speichert ein Scheitelpunktpufferobjekt Scheitelpunktdaten. Dies ist eigentlich nur ein Sonderfall eines allgemeineren Pufferobjekttyps, der unspezifische Daten speichern kann.
Die API für die Verwendung von Vertex-Pufferobjekten wurde in die bereits vorhandene Vertex-Array-API integriert. Aus diesem Grund sehen Sie darin seltsame Dinge wie das Konvertieren von Byte-Offsets in Zeiger. Jetzt haben wir eine Vertex-Array-API, die nur den Status speichert, wobei die Daten aus Pufferobjekten und nicht aus speicherinternen Arrays stammen.
Dies bringt uns fast zum Ende unserer Geschichte. Die resultierende API war ziemlich ausführlich, wenn es darum ging, den Vertex-Array-Status anzugeben. Ein weiterer Weg der Optimierung bestand darin, einen neuen Objekttyp zu erstellen, der diesen gesamten Status zusammenfasste, mehrere Änderungen des Vertex-Array-Status in einem einzigen API-Aufruf zuließ und GPUs zuließ um möglicherweise Optimierungen durchzuführen, weil Sie im Voraus wissen, welcher Status verwendet werden soll.
Geben Sie das Vertex-Array-Objekt ein, das all dies zusammenfasst.
Zusammenfassend begann ein Vertex-Array als Sammlung von Status und Daten (in einem Array gespeichert) zum Zeichnen mit. Ein Vertex-Puffer ersetzt den speicherinternen Array-Speicher durch einen GL-Objekttyp, sodass das Vertex-Array nur noch den Status aufweist. Ein Vertex-Array-Objekt ist nur ein Containerobjekt für diesen Status, sodass es einfacher und mit weniger API-Aufrufen geändert werden kann.
char* buffer = socketRead();
(Pseudocode). Das Protokoll hingegen durchläuft den gesamten Lebenszyklus der App. Sie erstellen also irgendwo ein Array und beginnen mit dem Lesen des Sockets, sobald Sie Daten erhalten, die Sie in das Array geschrieben haben. Auf diese Weise erhalten Sie eine übersichtliche Liste aller empfangenen Daten.