2009-09-04 8 views
2

OpenGL ES 1.1 aime bloquer mon programme iPhone si quelque chose ne va pas.Comment faire pour déboguer OpenGL ES se bloque?

Habituellement, cela se passe quelque part dans glDrawArrays, avec plusieurs appels glDestroyContext sur la pile.

En général, je suis bissectrice le problème en insérant

{ 
    GLint iErr = glGetError(); 
    if (iErr != GL_NO_ERROR) 
    { 
    NSLog(@"GL error: %d (0x%x)", iErr, iErr); 
    } 
} 

partout.

Cependant, parfois, ce n'est pas suffisant. Existe-t-il d'autres moyens d'obtenir des diagnostics utiles sur les raisons de l'accident?

Répondre

0

Avez-vous des messages d'erreur dans la sortie de la console? Juste à partir de la description, je me demande si vous obtenez une exception BAD_ACCESS. Si mon hypothèse est correcte, vous passez probablement un mauvais tableau à glVertexPointer, glColorPointer, ou à l'une des autres fonctions connexes.

Ai-je raison de supposer qu'il meurt en glDrawArrays et ne reviendra jamais? En d'autres termes, il n'y a aucun moyen d'appeler glGetError après glDrawArrays parce que le programme a déjà planté?

+0

Aucun message de console supplémentaire (c'est-à-dire, en dehors du type de crash - c'est généralement un mauvais accès en effet). Habituellement, il s'agit de mauvaises données d'entrée, ou j'ai oublié d'activer certains états. Mais il faut du temps pour trouver ce qui a mal tourné spécifiquement. Habituellement, je dois recourir à la recherche binaire. :( –

+0

Je vérifierais pour vous assurer que vous n'essayez pas de dessiner plus de triangles que vos tampons contiennent.Il semble que OpenGL entre dans la mémoire qu'il ne devrait pas, ce qui signifie probablement que vous avez dit que vous avez plus de vertices que vous avez vraiment dans le tampon. –

Questions connexes