Pergunta

O manual apenas instruído que você escreva:

glDeleteTextures(1, &GLtexture);

e reivindicações que a textura será apagado. iPhone tem memória escassa e quero garantir que essas texturas são realmente lançado.

O instrumento vazamentos não pode detectar isso, e, francamente, estou um pouco preocupado. Eu realmente quero ter certeza de que as texturas são realmente ido.

Obrigado.

Foi útil?

Solução

Textures não são tratados pelo Obj-c tempo de execução, de modo vazamentos não sabe nada sobre eles. Você tem que usar uma outra ferramenta.

No Xcode começar um novo projeto usando o modelo OpenGL. Pesquisar o método que as atualizações / desenha a cena e adicionar este código ao seu fim:

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

O código gera e destrói cinco texturas usando OpenGL Comandos. Construí-lo e executá-lo uma vez no seu dispositivo para verificar se ele está instalado. Não se preocupe com o chugging.

Agora instrumentos abertos e começar com o modelo em branco para o iPhone. Abra a biblioteca e arraste o Monitor de Memória para a janela. Clique no botão informações e tudo desmarque mas "Memory gratuito Física" divulgar. Agora, selecione a lançar o binário em seu iPhone para iniciar a gravação. Você deverá ver padrão de escada indo para cima / baixo, dependendo de quando Instruments tenta provar a aplicação. Enquanto o programa está sendo executado você pode ver todos os processos activos com a coluna "Real memória", mostrando o uso de memória real.

Em meus testes, este exemplo consome entre 25 MB a 3MB dependendo do momento da amostragem memória. Esta é uma segunda geração do iPhone e SDK 3.1. Se você tem um SDK 2.x você tem que procurar o tamanho do objeto GART residente no monitor OpenGL normal. Consulte http: // blog.zincroe.com/2009/04/how-to-check-iphone-texture-memory-usage-with-instruments/ para referência futura.

Em qualquer caso, a memória pulando para cima e para baixo prova que glDeleteTexture () faz o seu trabalho como anunciado.

Outras dicas

Enrole as chamadas para glDeleteTextures(int, int*) em sua própria função que mantém uma tabela de alocação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top