Question

Je reçois une erreur de poisson lors de l'utilisation glDrawElements (). Je suis en train de rendre des primitives simples (principalement rectangles) pour accélérer le dessin du texte et ainsi de suite, mais quand je l'appelle glDrawElements () l'écran complet clignote noir (pas seulement ma zone de fenêtre) pour une image ou deux. Le prochain cadre, il se retourne vers les mêmes « couleurs de Windows » comme avant. Et il scintille pendant quelques secondes, de se retrouver dans une boîte de message disant

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

Error 12

Y at-il paramètre pour GL que je dois réinitialiser avant d'appeler glDrawElements ()? Je sais que ce n'est pas un peu ballants glEnableClientState (), je l'ai vérifié (je l'habitude d'avoir un de ceux, mais glDrawElements () est écrasé à la place).

Venez y penser, il ressemble presque à une erreur de tampon de retour ... Toutes les idées sur ce qu'il faut essayer?

Était-ce utile?

La solution

Il est évident que vous mixez le mode VBO et le mode VA. Ceci est parfaitement possible, mais doit être utilisé avec précaution.

Lorsque vous appelez:

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

Cela signifie que la prochaine fois que vous rendez quelque chose avec glDrawElements(..., ..., ..., x), il utilisera x comme un pointeur sur les données des indices, et le dernier appel à glVertexPointer points sur les informations sur les sommets.

Si vous ne pas délie le VBO et IBO en cours (avec les deux appels glBindBuffer ci-dessus), cela signifie que lors du rendu avec les mêmes glDrawElements, x sera utilisé comme un décalage sur les indices données dans l'IBO , et le dernier appel à glVertexPointer comme un décalage sur les informations sur les sommets dans le VBO .

vous pouvez faire le crash du conducteur en fonction des valeurs de x et glVertexPointer parce que les compensations sortent des limites et / ou les données sous-jacentes est du mauvais type (NaN).

Donc, pour répondre à votre question, après le dessin en mode VBO et dessin avec le mode VA:

  1. délie la VBO actuelle
  2. délie l'IBO actuelle
  3. spécifier les sommets droite traitent avec glVertexPointer
  4. spécifier les indices avec droit traitent glDrawElements

et alors il sera très bien.

Autres conseils

Bah! Je l'ai trouvé. Quand je l'ai fait

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

avant de rendre le vacillement + s'écraser arrêté. Est-ce le comportement attendu? Désolé pour perdre du temps et de l'espace.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top