Ich habe Probleme mit Vertex-Puffer-Objekten ohne mit einem Vertex-Array-Objekt.
Mein Verständnis war, dass VAOs nur den Zustand um VBOs einkapseln. Aber sollten die VBOs nicht ohne VAO verwendbar sein?
Hier ist ein kleines Beispiel. Mit use_vao=true
funktioniert das korrekt (rendert orange rect). Mit use_vao=false
wird nichts gerendert und bei GL_INVALID_OPERATION
wird ein glDrawElements
Fehler generiert.
Auf meinem Rechner erzeugt glGetString(GL_VERSION)
4.1 INTEL-10.6.20
.
Die Verwendung von VAOs ist im Kernprofil erforderlich. Aus der OpenGL 3.3 Spezifikation, Seite 342, im Abschnitt E.2.2 "Entfernte Funktionen":
Das Standard-Vertex-Array-Objekt (der Name Null) ist ebenfalls veraltet.
Dies bedeutet, dass Sie Vertex-Attribute nicht einrichten können, ohne Ihren eigenen VAO zu erstellen und zu binden.
Nein, mit einem Core 3.3 + -Profil müssen Sie ein VAO zum Rendern verwenden.
Sie können jedoch einfach ein VAO erstellen und binden und es vergessen (halten Sie es gebunden).
Außerdem muss glEnableVertexAttribArray(0);
auch dann aufgerufen werden, wenn das Kompatibilitätsprofil verwendet wird und kein VAO verwendet wird.
Ein paar andere Bemerkungen sind, dass Sie alle Puffer und VAOs für jeden Frame neu generieren, aber nicht aufräumen. Sie sollten dies einmal während der Initialisierung tun und dann beim Zeichnen neu binden:
%Vor%