Это то, что происходит:Что вызывает колебания времени выполнения при представлении Renderbuffer? (OpenGL)
Функция drawGL вызывается в точном конце кадра благодаря
usleep
, как это было предложено. Это уже поддерживает постоянную частоту кадров.Фактическое представление renderbuffer имеет место с
drawGL()
. Измеряя время, необходимое для этого, дает мне колебания времени выполнения, что приводит к заиканию в моей анимации. Этот таймер использует mach_absolute_time, поэтому он очень точен.В конце моей рамки я измеряю
timeDifference
. Да, это в среднем 1 миллисекунда, но он отклоняется от, от 0,8 миллисекунды до 1,2 с пиками до более чем 2 миллисекунд.
Пример:
// Every something of a second I call tick
-(void)tick
{
drawGL();
}
- (void)drawGL
{
// startTime using mach_absolute_time;
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
// endTime using mach_absolute_time;
// timeDifference = endTime - startTime;
}
Я понимаю, что после того, как фреймбуфер был создан, представляя renderbuffer всегда должно принимать такое же усилие, независимо от сложности кадра? Это правда? А если нет, как я могу это предотвратить?
Кстати, это пример приложения для iPhone. Поэтому мы говорим об OpenGL ES, хотя я не думаю, что это проблема конкретной платформы. Если это так, то что происходит? И не должно ли это быть не происходит? И снова, если да, как я могу предотвратить это?
На самом деле, я уже провел время для расчетов, чтобы поддерживать стабильную частоту кадров. Фактический рисунок всегда имеет место в точном конце кадра. (Я использую для этого таймер сна) Я уточню вопрос для этого. – Kriem