2011-06-03 60 views
2
Uint32 prev = SDL_GetTicks(); 

while (true) 
{ 
    Draw(); 

    Uint32 now = SDL_GetTicks(); 
    Uint32 delta = now - prev; 
    printf("%u\n" , delta); 
    Update(delta/1000.0f); 
    prev = now; 

    ProcessEvents(); 
} 

该应用程序是一个简单的移动正方形。我的循环看起来像这样,当vsync在整个事情上运行得非常顺利;关闭它会导致动画的某种跳跃。我已经插入了一些版画,这里就是我发现:断断续续SDL + OpenGL的动画时VSYNC是

 
[...] 
16 
15 
16 
66 # 
2 # 
0 # 
0 # 
16 
16 
21 
[...] 

我知道有与这种循环的几个问题,但他们都不适用于这个简单的例子(我错了?)。什么导致了这种行为,我该如何克服它?

我在Linux系统上使用ATI卡,但我期待一个便携式解释/解决方案。

+0

打开或专有驱动程序? – genpfault 2011-06-03 14:52:31

+1

专有的,它似乎只发生在我自己的应用程序中。 – cYrus 2011-06-03 14:53:54

+0

SDL 1.2或1.3? (Draw)()执行'glFinish()/ glFlush()'和/或'SDL_GL_SwapBuffers()'吗? – genpfault 2011-06-03 14:57:08

回答

1

看起来它缺少glFinish(),我读过的地方说,在大多数情况下调用这个函数是无用的(例如herehere)。那么,我可能误解了一些基本概念,但这对我有效,现在Draw()函数以:

[...] 
    glFinish(); 
    SDL_GL_SwapBuffers(); 
}