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.
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
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
@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. –