2013-01-19 1 views
1

Je projet Android utilisant ancienne OpenGL ES 1. J'utilise ce genre d'appels imbriqués:Nested glPushMatrix ne fonctionne pas (taille de la pile 1?)

... 
gl.glPushMatrix(); 
... 
gl.glPushMatrix(); 
... 
gl.glPopMatrix(); 
... 
gl.glPopMatrix(); 
... 

Il fonctionne bien dans l'émulateur et sur mon téléphone mais ça ne marche pas sur mon onglet et sur l'onglet de mon frère (les positions des objets sont fausses). Selon mes tests, il semble que glPushMatrix imbriqué n'est pas supporté, comme si la taille de la pile est seulement 1, donc le premier POP ne retourne pas à l'état PUSH précédent mais au premier des états PUSH. J'ai essayé une solution de contournement sans utiliser d'appels imbriqués et cela fonctionne très bien, mais une telle solution complique mon prochain travail. Est-ce que c'est une chose connue? Est-ce que la taille de la pile sur certains appareils est seulement 1? Je pensais que ce devrait être au moins 32 ou quelque chose comme ça. Est-il en quelque sorte détectable et/ou configurable? Puis-je exporter la matrice d'une façon ou d'une autre dans un tableau ou une structure différente pour créer ma propre pile et la charger manuellement? Merci.

Répondre

2

Vous pouvez lire la profondeur de la pile à l'aide:

glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &result); 

Il devrait en effet être au moins 32.

C'est en supposant que vous utilisez en fait la pile de la matrice GL_MODELVIEW, et vous n'êtes pas accidentellement pousser toutes vos transformations dans GL_PROJECTION ou quelque chose.

Idéalement, vous devriez calculer les matrices vous-même, car cette fonctionnalité est obsolète.

+0

Oh mec, merci pour votre réponse! Je suis désolé c'était vraiment mon erreur, j'utilisais GL_PROJECTION et glOrthof ... Je suis passé à GL_MODELVIEW et ça marche bien maintenant. Merci beaucoup, ça fait de nombreuses années que je travaillais en "classique" OpenGL et il semble que j'ai presque tout oublié. – Martin

+0

Et en ce qui concerne la fonctionnalité déconseillée - oui, je suis au courant, je vais probablement essayer de passer bientôt à ES 2.0 pour ce projet ou le prochain. – Martin