Pregunta

El manual acaba de indicarle que escriba:

glDeleteTextures(1, &GLtexture);

y afirma que la textura se eliminará. El iPhone tiene poca memoria y quiero asegurarme de que estas texturas se liberen realmente.

El instrumento Leaks no puede detectar esto y, francamente, estoy un poco preocupado. Realmente quiero asegurarme de que las texturas realmente hayan desaparecido.

Gracias.

¿Fue útil?

Solución

Las texturas no son manejadas por el tiempo de ejecución Obj-c, por lo que las filtraciones no saben nada sobre ellas. Tienes que usar otra herramienta.

En Xcode, inicie un nuevo proyecto utilizando la plantilla OpenGL. Busque el método que actualiza / dibuja la escena y agregue este código al final:

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

El código genera y destruye cinco texturas usando los comandos de OpenGL. Compílelo y ejecútelo una vez en su dispositivo para asegurarse de que esté instalado. No te preocupes por el ruido.

Ahora abra los instrumentos y comience con la plantilla en blanco para el iPhone. Abra la biblioteca y arrastre el Monitor de memoria a la ventana. Haga clic en el botón de revelación de información y desmarque todo menos "Memoria física libre". Ahora seleccione iniciar el binario en su iPhone para comenzar a grabar. Debería ver que el patrón de escalera sube / baja dependiendo de cuándo Instruments intenta muestrear la aplicación. Mientras el programa se está ejecutando, puede ver todos los procesos activos con la columna "Memoria real", que muestra el uso real de la memoria.

En mis pruebas, este ejemplo consume entre 25MB y 3MB dependiendo del momento del muestreo de memoria. Esto es con un iPhone de segunda generación y SDK 3.1. Si tiene un SDK 2.x, debe buscar el tamaño de objeto residente de GART en el monitor OpenGL normal. Ver http: // blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/ para mayor referencia.

En cualquier caso, la memoria saltando hacia arriba y hacia abajo demuestra que glDeleteTexture () hace su trabajo como se anuncia.

Otros consejos

Envuelva las llamadas a glDeleteTextures (int, int *) en su propia función que mantiene una tabla de asignación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top