这就是发生的事情:
usleep
正如建议的那样,由于 a , drawGL 函数在帧的确切结束处被调用。这已经保持了稳定的帧速率。渲染缓冲区的实际呈现发生在
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;
}
我的理解是,一旦创建了帧缓冲区,无论帧的复杂性如何,呈现渲染缓冲区都应该始终付出同样的努力?这是真的?如果没有,我该如何防止这种情况?
顺便说一下,这是一个 iPhone 应用程序的示例。所以我们在这里讨论的是 OpenGL ES,尽管我不认为这是一个特定于平台的问题。如果是,那是怎么回事?这不应该不会发生吗?再说一次,如果是这样,我怎样才能防止这种情况发生?