2009-09-07 10 views
0

Quelqu'un sait quelles sont les meilleures pratiques pour dessiner plusieurs couches de contenu 2D OpenGL ES sur l'iPhone? Par exemple, disons que je veux dessiner une texture d'arrière-plan en plein écran complexe, suivie d'une texture en rotation, suivie d'une autre texture alpha mélangée sur le dessus.Quelle est la meilleure façon de dessiner un contenu OpenGL en couches?

Existe-t-il un moyen de dessiner une seule fois la texture d'arrière-plan et de ne dessiner des modifications que sur les couches supérieures si nécessaire? Tout ce que j'ai trouvé jusqu'ici indique que vous devriez toujours glClear(), puis dessiner tout, chaque image, chaque tick, dans le bon ordre. Mais il n'y a aucun sens à dessiner quelque chose 60 fois par seconde si cela ne change pas ...

Merci!

Répondre

0

Vous n'avez pas besoin de glClear() si votre dessin couvre tous les pixels (et que vous ne fusionnez pas alpha avec la couleur claire). (Vous n'avez pas à dessiner ce que vous ne pouvez pas voir.)

Cependant, dans la plupart des cas, vous devrez dessiner l'arrière-plan à chaque image. Si votre animation se déroule uniquement dans un rectangle plus petit que l'écran (et que le reste reste statique), vous pourriez peut-être seulement redessiner ce rectangle, mais c'est probablement plus de problèmes que cela en vaut la peine.

Qu'est-ce qui rend la texture de votre arrière-plan complexe? Est-il juste grand (512x512)?

+0

En fait, j'utilisais juste ceci comme exemple ... en réalité, je dessine du contenu en couches complexe. En arrière-plan, c'est en fait un tas de lignes. Au-dessus de ça, je dessine une texture en rotation constante, et au-dessus de ça, une autre série de textures. Comme l'arrière-plan est complexe (pas seulement une texture), il faut du temps pour le rendu, et je voulais voir si je pouvais le mettre en cache en le dessinant une seule fois. Dessiner tous les 3 couches chaque image s'avère trop lent. Jusqu'ici, j'ai résolu cela en ayant 2 EAGLViews, le top est réglé sur opaque = NO. Je me demandais juste s'il y avait une meilleure façon de le faire. – yozzozo

+0

Vous pouvez alors rendre toutes les lignes à une texture, puis rendre cette texture à chaque image. Cela devrait aider si le dessin au trait est lent. (Vous avez profilé, non?) –