Frage

Ich bin ein fischig Fehler bekommen, wenn glDrawElements () verwenden. Ich versuche einfach Primitiven (hauptsächlich Rechtecke) zu machen Zeichnung von Text zu beschleunigen und so weiter, aber wenn ich rufe glDrawElements () der gesamte Bildschirm blinkt schwarz (nicht nur meinen Fensterbereich) für einen Rahmen oder so. Der nächste Rahmen wird es nach wie vor die gleichen „Windows-Farben“ zurück. Und so flimmert es für ein paar Sekunden, in einem Meldungsfeld enden sagen

The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.

Error 12

Gibt es eine Einstellung für GL, die ich vor dem Aufruf glDrawElements zurücksetzen müssen ()? Ich weiß, es ist nicht etwas baumeln glEnableClientState () Ich habe es (ich habe einen von denen zu haben, aber dann glDrawElements () abgestürzt statt).

Kommen Sie, daran zu denken, es sieht fast aus wie ein Hintergrundpuffer Fehler ... Irgendwelche Ideen auf, was zu versuchen?

War es hilfreich?

Lösung

Offensichtlich Sie mischen VBO-Modus und VA-Modus. Dies ist durchaus möglich, müssen jedoch mit Vorsicht sein verwenden.

Wenn Sie anrufen:

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

Das bedeutet, dass Sie beim nächsten Mal etwas mit glDrawElements(..., ..., ..., x) machen, es x als Zeiger auf den Indizes Daten und den letzten Aufruf von glVertexPointer Punkten auf den Eckpunkten Daten verwenden werden.

Wenn Sie nicht unbind die aktuelle VBO und IBO (mit den beiden oben genannten glBindBuffer nennt), bedeutet dies, dass, wenn sie mit den gleichen glDrawElements Rendering x Einsatz sein wird als auf den Indizes Offset Daten in der IBO , und den letzten Aufruf glVertexPointer als auf den Scheiteldaten Offset in der VBO .

Werte von x und glVertexPointer Je Sie können den Treiber zum Absturz bringen, da die Offsets außerhalb der Grenzen gehen und / oder die zugrunde liegenden Daten sind vom falschen Typ (NaN).

Also für Ihre Frage zu beantworten, nachdem sie mit VBO-Modus zeichnen und dann mit VA-Modus Zeichnung:

  1. unbind den aktuellen VBO
  2. unbind den aktuellen IBO
  3. Geben Sie die richtigen Eckpunkte Adresse mit glVertexPointer
  4. Geben Sie die richtigen Indizes Adresse mit glDrawElements

und dann wird es in Ordnung sein.

Andere Tipps

Bah! Fand es. Als ich das tat

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

vor dem Flackern Rendering + gestoppt abstürzt. Ist dies das erwartete Verhalten? Es tut uns Zeit und Raum zu verschwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top