Verwendung von VBOs ohne VAOs mit OpenGL-Core-Profil?

8

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.

%Vor%

Auf meinem Rechner erzeugt glGetString(GL_VERSION) 4.1 INTEL-10.6.20 .

    
Alec Jacobson 05.05.2015, 15:32
quelle

2 Antworten

13

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.

    
Reto Koradi 05.05.2015, 15:42
quelle
9

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%     
ratchet freak 05.05.2015 15:39
quelle

Tags und Links