垂直同步开启时,SDL+OpenGL 动画不连贯
Posted
技术标签:
【中文标题】垂直同步开启时,SDL+OpenGL 动画不连贯【英文标题】:Choppy SDL+OpenGL animation when vsync is on 【发布时间】:2011-06-03 14:50:05 【问题描述】: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 运行时,整个事情运行得非常顺利;将其关闭会导致动画的某种跳跃。我插入了一些打印件,这是我发现的:
[...] 16 15 16 66# 2# 0 # 0 # 16 16 21 [...]我知道这种循环有几个问题,但似乎没有一个适用于这个简单的例子(我错了吗?)。是什么导致了这种行为,我该如何克服?
我在 Linux 系统上使用 ATI 卡,但我期待一个可移植的解释/解决方案。
【问题讨论】:
专有的,它似乎只发生在我自己的应用程序中。 SDL 1.2 还是 1.3?Draw()
做 glFinish()/glFlush()
和/或 SDL_GL_SwapBuffers()
吗?
sdl-config --version
说1.2.14
。它只做SDL_GL_SwapBuffers()
。
【参考方案1】:
似乎缺少glFinish()
,我在某处读到该函数的调用在大多数情况下是无用的(例如here 或here)。好吧,我可能误解了一些基本概念,但这对我有用,现在Draw()
函数以:
[...]
glFinish();
SDL_GL_SwapBuffers();
【讨论】:
以上是关于垂直同步开启时,SDL+OpenGL 动画不连贯的主要内容,如果未能解决你的问题,请参考以下文章