如何避免与在Linux / X11 pygame的撕裂
题
我一直在玩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发生而屏幕正在更新,这是撕裂的原因。
不隶属于 StackOverflow