2010-04-21 5 views
0

J'ai 2 feuilles de sprites 1024x1024, une contenant plusieurs images de fond 480x320 et une autre contenant une variété d'éléments plus petits comme entités et interface. Mon framerate tombe comme une pierre chaque fois que j'entre dans une scène dans laquelle je dois afficher des sprites des deux textures (me forçant à relier deux fois par image, texture d'interface-> texture bg-> texture d'interface).Optimisation de l'échange de texture sur les opengles pour l'iPhone

- (void)setCurrentTexture:(int)texID{ 
if(currentTex == texID) 
    return; 
else 
    currentTex = texID; 

// Bind the texture name. 
glBindTexture(GL_TEXTURE_2D, [Graphics getTexture:texID]); 
// Speidfy a 2D texture image, provideing the a pointer to the image data in memory 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, [Graphics getTexWidth:texID], [Graphics getTexHeight:texID], 0, GL_RGBA, GL_UNSIGNED_BYTE, [Graphics getTexData:texID]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
} 

Y at-il un problème avec la façon dont je permute mes textures? Editer: J'ai supprimé la moitié des changements d'état que j'ai faits. Suppression de l'un des trois résultats ci-dessus dans mes polygones texturés avec rien (c'est-à-dire le blanc du spectacle). Le plus gros frappeur est glTexImage2D ... mais essayer de le placer ailleurs (à init, par exemple) finit par ne pas texturer mes modèles/quads.

Répondre

0

Si vous ne mettez pas à jour les données dans les textures, vous devez appeler glTexImage2D une seule fois pour chaque texture au démarrage de l'application.

+0

Je ne touche pas les données dans l'une des textures, ou du moins, cela ne devrait pas être le cas ... mais si je le fais une fois au démarrage, je me retrouve avec des polygones non texturés ... Je devrais être l'appeler dès que j'ai un pointeur vers les données réelles sprite, non? – akaii

+0

D'accord, j'ai réparé. Tu avais raison. glTexImage2D n'a besoin d'être appelé qu'une seule fois. J'ai oublié d'appeler glBindTexture avant glTexImage2D, ce qui explique pourquoi glTexImage2D échouait. – akaii

+0

@akaii Vous n'aurez besoin que d'appeler 'glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);' une fois pour chaque texture, juste pour que vous sachiez. –

Questions connexes