나는 빈의 OpenGL ES 응용 프로그램에 크게 기반으로 아이폰에서의 OpenGL ES 1.1 프로젝트는 여기에 준 : 나는에 테스트하고 있습니다아이폰의 OpenGL ES : 타이머 기반 그리기 문제, jitteryness
http://iphonedevelopment.blogspot.com/2009/06/empty-opengl-es-application-project.html
3G (3GS가 아님) 장치, 8GB.
OpenGL 작업을 수행하는 내 응용 프로그램의 페인트 루프는 화면을 렌더링 할 때마다 상당히 많은 작업을 수행합니다. 그러나 각 페인트 사이클에서 동일한 작업을 수행하는 상황에서 가변 프레임 속도가 나타납니다. 페인트 코드를 발사하는 NSTimer를 초당 30 번 발사하도록 설정했습니다. 즉 0.0333 초마다 실행됩니다. 가장 큰 문제점은 내 실제 페인트 코드가 벽 시간과 관련하여 한 페인트를 실행하는 데 대략 소요되는 시간이 다르기는하지만 분명하지는 않지만 시간이 오래 걸리는 경우가 있습니다. 신중한 로깅을 사용하여 최대 시간 간격이보고되면, 필자의 페인트가 완료되기까지 0.23 초가 소요되는 것을 볼 수 있습니다. 이는 4FPS와 같은데, 30FPS와 비교하면 5 프레임의 애니메이션/사용자 상호 작용을 건너 뛰는 것과 같습니다. isn 매우 받아 들일 수 없다.
처음에는 내 페인트 루프가 일부 잠금 장치에 걸려있는 것 같았습니다 (GL이 메인 스레드 (필수 AFAIK)에 들어 오기 때문에 들어오는 이벤트 처리가 있음)하지만 일부 미세한 입도로 로깅을하면 한 번의 페인트 코드 실행 사이클에서 기본적으로 거의 수행하지 않는 코드와 GL 작업이 아닌 많은 시간이 걸리는 것으로 나타났습니다.
내 GL 드로잉 스레드 (즉, 메인 스레드)와 약간의 차이가 있습니다. 내 응용 프로그램에서 통신이 있고 그 문제가 있는지 보려면 통신을 사용할 수 없게되지만 - 매번 동일한 그림을 할 때 내 그림의 실행 시간에 여전히 "스파이크"가 나타납니다.
다른 스레드가 내 페인트 코드로 돌아 오기 전, 시대에 따라 중간 페인트 코드로 전환되는 것처럼 보입니다.
어떻게 진행되고 있는지 더 자세히 분석 할 수있는 아이디어가 있습니까? NSTimers가 완벽하지 않고 보장 된 빈도가 아니라는 것을 압니다. 그러나 여기에서 주요한 문제는 실제 페인트 사이클이 때로는 단지 다른 스레드가 전환되기 때문에 영원히 걸리는 것입니다 ...
난 그냥 명확히하기 위해, 영업 해요 : 로그를 검사하는 것은 나이를 취 내 페인트 코드에는 '결정적 증거'부분이 없다는 것을 알 수있다. 페인트 코드의 다양한 비트는 여러 다른 시간에 완료하는 데 오랜 시간이 걸리기 때문에 때로는 내 페인트 코드가 중간 흐름에 '인터럽트'된 것처럼 보입니다. –
OP 다시. 페인트 루프를 실행하기 위해 NSTimer를 사용하는 것이 왜 나쁜 생각 일 수 있는지 유익한 게시물을 발견했습니다. 즉, 사용자 터치 반응이 실패 할 수 있습니다. 'igalic'의 게시물 검색 : http : //www.idevgames. com/forum/showthread.php? t = 15873 –