iPhone의 OpenGl ES 텍스처가 진정으로 거래되었는지 확인할 수 있습니까?
문제
매뉴얼은 방금 작성하도록 지시했습니다.
glDeleteTextures(1, &GLtexture);
텍스처가 삭제 될 것이라고 주장합니다. iPhone은 메모리가 부족하며 이러한 텍스처가 실제로 출시되도록하고 싶습니다.
누출 기기는 이것을 감지 할 수 없으며 솔직히 말해서 조금 걱정됩니다. 나는 정말로 질감이 실제로 사라 졌는지 확인하고 싶다.
고맙습니다.
해결책
텍스처는 OBJ-C 런타임에 의해 처리되지 않으므로 누출은 그들에 대해 아무것도 알지 못합니다. 다른 도구를 사용해야합니다.
Xcode에서 OpenGL 템플릿을 사용하여 새 프로젝트를 시작하십시오. 장면을 업데이트/그리기하는 메소드를 검색 하고이 코드를 끝에 추가하십시오.
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);
}
코드는 OpenGL 명령을 사용하여 5 개의 텍스처를 생성하고 파괴합니다. 설치되어 있는지 확인하고 장치에서 한 번 실행하십시오. 처지에 대해 걱정하지 마십시오.
이제 악기를 열고 iPhone의 빈 템플릿으로 시작하십시오. 라이브러리를 열고 메모리 모니터를 창으로 드래그하십시오. 정보 공개 버튼을 클릭하고 "물리적 메모리 무료"를 제외한 모든 것을 선택 취소하십시오. 이제 iPhone에서 바이너리를 시작하여 녹음을 시작하십시오. 악기가 응용 프로그램을 샘플링하려고 할 때 계단 패턴이 위/아래로 향하는 것을 볼 수 있습니다. 프로그램이 실행되는 동안 "실제 메모리"열이있는 모든 활성 프로세스를 볼 수 있으며 실제 메모리 사용을 표시합니다.
내 테스트 에서이 예는 메모리 샘플링 모멘트에 따라 25MB에서 3MB 사이를 소비합니다. 이것은 2 세대 iPhone과 SDK 3.1입니다. 2.X SDK가있는 경우 일반 OpenGL 모니터에서 GART Resident Object 크기를 검색해야합니다. 보다 http://blog.zincroe.com/2009/04/how-to-check-iphone-texture-mory-usage-with-instruments/ 추가 참조.
어쨌든, 메모리가 위아래로 점프하면 gldeletetexture ()가 광고 된대로 작업을 수행한다는 것을 증명합니다.
다른 팁
전화를 랩하십시오 glDeleteTextures(int, int*)
할당 테이블을 유지하는 자신의 기능에서.