Domanda

Il manuale ti ha appena richiesto di scrivere:

glDeleteTextures(1, &GLtexture);

e afferma che la trama verrà eliminata. L'iPhone ha poca memoria e voglio assicurarmi che queste trame vengano davvero rilasciate.

Lo strumento Perdite non è in grado di rilevarlo e, francamente, sono un po 'preoccupato. Voglio davvero assicurarmi che le trame siano davvero sparite.

Grazie.

È stato utile?

Soluzione

Le trame non sono gestite dal runtime di Obj-c, quindi le perdite non ne sanno nulla. Devi usare un altro strumento.

In Xcode avvia un nuovo progetto usando il modello OpenGL. Cerca il metodo che aggiorna / disegna la scena e aggiungi questo codice alla fine:

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);
}

Il codice genera e distrugge cinque trame usando i comandi OpenGL. Costruiscilo ed eseguilo una volta sul tuo dispositivo per assicurarti che sia installato. Non preoccuparti per il soffocamento.

Ora apri gli strumenti e inizia con il modello vuoto per iPhone. Apri la libreria e trascina Memory Monitor nella finestra. Fai clic sul pulsante di divulgazione delle informazioni e deseleziona tutto tranne "Quotazione memoria libera". Ora seleziona per avviare il file binario sul tuo iPhone per iniziare la registrazione. Dovresti vedere lo schema delle scale che sale / scende a seconda di quando Instruments tenta di campionare l'applicazione. Mentre il programma è in esecuzione, puoi vedere tutti i processi attivi con la colonna "Memoria reale", che mostra l'utilizzo effettivo della memoria.

Nei miei test, questo esempio consuma tra 25 MB e 3 MB a seconda del momento del campionamento della memoria. Questo è con un iPhone e SDK 3.1 di seconda generazione. Se si dispone di un SDK 2.x, è necessario cercare la Dimensione oggetto residente GART nel normale monitor OpenGL. Vedi http: // blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/ per ulteriori riferimenti.

In ogni caso, la memoria che salta su e giù dimostra che glDeleteTexture () fa il suo lavoro come pubblicizzato.

Altri suggerimenti

Avvolgi le chiamate a glDeleteTextures (int, int *) nella tua funzione che mantiene una tabella di allocazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top