tim*_*day 6 x11 graphics pygame sdl vsync
我一直在玩pygame(在Debian/Lenny上).它似乎工作得很好,除了烦人的blits撕裂(全屏或窗口模式).
我正在使用默认的SDL X11驱动程序.谷歌搜索表明SDL的一个已知问题是X11没有提供vsync功能(即使使用FULLSCREEN|DOUBLEBUF|HWSURFACE标志创建的显示),我应该使用"dga"驱动程序.
但是,跑步
SDL_VIDEODRIVER=dga ./mygame.py
Run Code Online (Sandbox Code Playgroud)
抛出pygame初始化
pygame.error: No available video device
Run Code Online (Sandbox Code Playgroud)
(尽管xdpyinfo存在XFree86-DGA扩展).
所以:获得无泪vsynced翻转的诀窍是什么?通过让这个dga工作或其他机制?
将撕裂降至最低的最佳方法是使帧速率尽可能接近屏幕频率。除非您通过它运行 OpenGL,否则 SDL 库没有 vsync,因此唯一的方法是自己估算帧速率。SDL 硬件双缓冲区不能保证,虽然它在工作时很好。我很少看到它在行动。
根据我使用 SDL 的经验,您必须使用 OpenGL 来完全消除撕裂。这是一个调整,但绘制简单的 2D 纹理并不是那么复杂,您还可以获得一些其他额外的好处,您可以实现这些好处,例如旋转、缩放、混合等。
但是,如果您仍然想使用软件渲染,我建议使用脏矩形更新。习惯它也有点困难,但它节省了大量的处理工作,这可能会使更新更容易跟上节奏,并避免整个屏幕被撕裂(除非你滚动整个游戏区域或其他东西)。以及绘制到缓冲区所需的时间最少,这可以避免在屏幕更新时发生位块传输,这是撕裂的原因。
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |