我一直在玩pygame的(在Debian /莱尼)。 它似乎很好地工作,除了位块传输的恼人的撕裂(全屏或窗口模式)。

我使用的是默认的SDL X11的驱动程序。谷歌搜索显示,这是一个已知的问题与SDL是X11没有提供垂直同步设备(甚至与FULLSCREEN|DOUBLEBUF|HWSURFACE标记创建显示器),我应该用“DGA”驱动程序。

但是,运行

SDL_VIDEODRIVER=dga ./mygame.py

抛出pygame的初始化与

pygame.error: No available video device

(尽管xdpyinfo表示一个XFree86-DGA扩展本)。

所以:有什么窍门能让无泪vsynced翻转?无论是通过获取这个DGA的事情工作或其他一些机制?

有帮助吗?

解决方案

那么我最终的解决办法是改用 Pyglet ,这似乎支持OpenGL比pygame的好多了,没有任何闪烁的问题。

其他提示

最好的办法,以保持撕裂到最低限度是让你的帧速率接近屏幕的频率成为可能。 SDL库不具有垂直同步,除非你通过它运行的OpenGL,所以唯一的办法是在接近帧速率自己。 SDL的硬件双缓冲无法保证,虽然很好,当它的工作原理。我已经罕看到它在行动。

在我与SDL的经验,你必须使用OpenGL完全消除撕裂。这是一个有点调整,但绘制简单的2D贴图是不是所有的复杂的,你会得到一些其他的附加奖金,你是能够实现诸如旋转,缩放,混合等。

不过,如果你仍然想使用该软件的渲染,我推荐使用肮脏矩形更新。这也是一个有点难以习惯,但这样可以节省处理的负担可能更容易保持更新了的步伐,并避免了整个屏幕被撕开(除非你滚动整个游乐区或东西)。以及它需要绘制到缓冲器中的时间是最小的,其可避免的blitting发生而屏幕正在更新,这是撕裂的原因。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top