Question

Le manuel vous demande simplement d'écrire:

glDeleteTextures(1, &GLtexture);

et affirme que la texture sera supprimée. L'iPhone a peu de mémoire et je veux m'assurer que ces textures sont vraiment libérées.

L’instrument Leaks ne peut pas détecter cela et, franchement, je suis un peu inquiet. Je veux vraiment m'assurer que les textures sont vraiment parties.

Merci.

Était-ce utile?

La solution

Les textures ne sont pas gérées par le moteur d'exécution Obj-c, les fuites n'en savent donc rien. Vous devez utiliser un autre outil.

Sous Xcode, démarrez un nouveau projet en utilisant le modèle OpenGL. Recherchez la méthode qui met à jour / dessine la scène et ajoutez ce code à sa fin:

static int tick = -1;
static GLuint tex[5];

if (tick++ < 0)
    for (int f = 0; f < 5; f++)
        tex[f] = 0;

tick = tick % 5;
if (tex[tick]) {
    glDeleteTextures(1, &tex[tick]);
    tex[tick] = 0;
} else {
    glGenTextures(1, &tex[tick]);
    glBindTexture(GL_TEXTURE_2D, tex[tick]);
    char *mem = malloc(1024 * 1024 * 4);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,
        1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, mem);
    free(mem);
}

Le code génère et détruit cinq textures à l'aide de commandes OpenGL. Construisez-le et exécutez-le une fois sur votre appareil pour vous assurer qu'il est installé. Ne vous inquiétez pas pour le chugging.

Ouvrez maintenant les instruments et commencez par le modèle vierge pour iPhone. Ouvrez la bibliothèque et faites glisser le moniteur de mémoire vers la fenêtre. Cliquez sur le bouton d'informations à divulguer et décochez toutes les options sauf "Mémoire physique libre". Maintenant, sélectionnez pour lancer le binaire sur votre iphone pour commencer l'enregistrement. Vous devriez voir un motif d'escalier monter / descendre en fonction du moment où Instruments essaie de tester l'application. Pendant l’exécution du programme, vous pouvez voir tous les processus actifs dans la colonne "Mémoire réelle", indiquant l’utilisation réelle de la mémoire.

Dans mes tests, cet exemple consomme entre 25 Mo et 3 Mo en fonction du moment de l’échantillonnage en mémoire. Ceci est avec un iPhone de deuxième génération et SDK 3.1. Si vous avez un SDK 2.x, vous devez rechercher la taille d'objet résident GART dans le moniteur OpenGL normal. Voir http: // blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/ pour plus de références.

Dans tous les cas, la mémoire qui saute de mémoire prouve que glDeleteTexture () fait son travail comme annoncé.

Autres conseils

Emballez les appels vers glDeleteTextures (int, int *) dans votre propre fonction qui gère une table de correspondances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top