2011-06-03 61 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(); 
}