J'ai un grand atlas de texture et je dessine beaucoup de textures sur l'écran. En ce moment, chaque texture de l'atlas est établi séparément avec le code comme ceci:Combinez beaucoup d'atlas de texture dessinez des appels avec OpenGL ES
GLfloat coordinates[] = { bla, bla, bla, bla, bla, bla, bla, bla }; GLfloat vertices[] = { bla, bla, bla, bla, bla, bla bla, bla, bla bla, bla bla }; glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, name); glVertexPointer(3, GL_FLOAT, 0, vertices); glTexCoordPointer(2, GL_FLOAT, 0, coordinates); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
Nous faisons cela avec une bande de triangle.
Maintenant, je viens d'essayer de mettre en cache ce genre d'appels en sauvegardant les coordonnées/sommets, et en les dessinant tous en un seul appel. Mais OpenGL ES n'a pas de quads, donc essayer d'utiliser des bandes triangulaires signifie que l'opération les fusionnera toutes et que vous obtiendrez des textures qui se déforment sur l'écran à partir du point précédent.
J'ai essayé à la fois avec glDrawArrays et glDrawElements mais je n'ai pas eu de succès. Est-ce seulement possible?
Oui, c'est ce que j'ai fini par faire. Au lieu de définir une bande de triangle avec 4 points dans mes tableaux, j'ai défini deux triangles (6 points) et utilisé glDrawArrays (GL_TRIANGLES, 0, totalSize * 6). Donc, cela empêche tout être déformé en une bande de triangle géante. –
La création de la version GL_TRIANGLE_STRIP présente des avantages en termes de performances. –