Исходная анимация iOS OpenGL ES 1.1 с использованием CADisplayLink (исправления перезагрузки на некоторое время)

Я использую OpenGL ES 1.1 и CADisplayLink для анимации 3d-сцены. Если устройство iOS было перезагружено довольно недавно, анимация плавная, а дельта времени между двумя вызовами displayLink.timestamp довольно ровная. Но через несколько часов или дней использования iOS-устройства, и мое приложение иногда запускается несколько раз, анимация становится отрывистой, а время дельта увеличивается, а затем восстанавливается до более низкого значения только для увеличения.

Как это:

2012-09-01 23: 42: 58.770 [2678: 707] dt = 0.021139

2012-09-01 23: 42: 58.787 [2678: 707] dt = 0,02183

2012-09-01 23: 42: 58.804 [2678: 707] dt = 0,023223

2012-09-01 23: 42: 58,820 [2678: 707] dt = 0,024270

2012-09-01 23: 42: 58,837 [2678: 707] dt = 0,009679

2012-09-01 23: 42: 58,853 [2678: 707] dt = 0,010750

2012-09-01 23: 42: 58,870 [2678: 707] dt = 0,011766

2012-09-01 23: 42: 58,887 [2678: 707] dt = 0,012806

2012-09-01 23: 42: 58.903 [2678: 707] dt = 0,013847

2012-09-01 23: 42: 58,920 [2678: 707] dt = 0,014890

2012-09-01 23: 42: 58,937 [2678: 707] dt = 0,015933

2012-09-01 23: 42: 58,953 [2678: 707] dt = 0,016976

2012-09-01 23: 42: 58,970 [2678: 707] dt = 0,018011

2012-09-01 23: 42: 58,987 [2678: 707] dt = 0,019055

2012-09-01 23: 42: 59.003 [2678: 707] dt = 0.020097

2012-09-01 23: 42: 59.020 [2678: 707] dt = 0.021143

2012-09-01 23: 42: 59.037 [2678: 707] dt = 0.022181

2012-09-01 23: 42: 59.054 [2678: 707] dt = 0,023222

2012-09-01 23: 42: 59.071 [2678: 707] dt = 0,024288

2012-09-01 23: 42: 59.087 [2678: 707] dt = 0,009624

2012-09-01 23: 42: 59,103 [2678: 707] dt = 0,010728

2012-09-01 23: 42: 59.121 [2678: 707] dt = 0,011763

2012-09-01 23: 42: 59.137 [2678: 707] dt = 0,012808

2012-09-01 23: 42: 59,153 [2678: 707] dt = 0,013847

2012-09-01 23: 42: 59.170 [2678: 707] dt = 0,014891

2012-09-01 23: 42: 59.187 [2678: 707] dt = 0,016002

2012-09-01 23: 42: 59.203 [2678: 707] dt = 0,016979

2012-09-01 23: 42: 59,220 [2678: 707] dt = 0,018016

2012-09-01 23: 42: 59.237 [2678: 707] dt = 0,019042

2012-09-01 23: 42: 59.253 [2678: 707] dt = 0.020099

2012-09-01 23: 42: 59.270 [2678: 707] dt = 0,021138

2012-09-01 23: 42: 59.287 [2678: 707] dt = 0.022185

2012-09-01 23: 42: 59.304 [2678: 707] dt = 0,023222

2012-09-01 23: 42: 59.320 [2678: 707] dt = 0,024265

2012-09-01 23: 42: 59.337 [2678: 707] dt = 0,009681

2012-09-01 23: 42: 59.354 [2678: 707] dt = 0,010736

И затем, если устройство iOS перезагрузится, анимация снова станет гладкой.

Проблема даже возникает на моем экране меню, когда в функции UpdateAnimation () не происходит никаких вычислений, связанных с игрой.

Я не понимаю, что происходит, и почему новая перезагрузка всегда исправляет эту проблему некоторое время.

Нашел проблему! Я использую timestamp из CADisplayLink для вычисления времени между кадрами. timestamp – двойная, но я (неправильно) назначил ее плавающей точке. Это привело к потере точности и вызвало неправильный расчет времени кадра. временная метка возрастает с того момента, когда пользователь перезагрузил устройство и, в конце концов, становится таким большим, он должен быть двойным, чтобы использоваться для точного расчета времени между кадрами.

Давайте будем гением компьютера.