gpt4 book ai didi

graphics - 如何避免在 Linux/X11 上使用 pygame 撕裂

转载 作者:行者123 更新时间:2023-12-04 14:21:17 24 4
gpt4 key购买 nike

我一直在玩 pygame(在 Debian/Lenny 上)。
它似乎工作得很好,除了令人讨厌的 blit 撕裂(全屏或窗口模式)。

我正在使用默认的 SDL X11 驱动程序。谷歌搜索表明,SDL 的一个已知问题是 X11 不提供 vsync 设施(即使使用 FULLSCREEN|DOUBLEBUF|HWSURFACE 标志创建的显示),我应该改用“dga”驱动程序。

然而,运行

SDL_VIDEODRIVER=dga ./mygame.py

抛出 pygame 初始化
pygame.error: No available video device

(尽管 xdpyinfo 显示存在 XFree86-DGA 扩展)。

那么:获得无撕裂 vsynced 翻转的诀窍是什么?是通过让这个 dga 工作还是其他一些机制?

最佳答案

将撕裂降至最低的最佳方法是使帧速率尽可能接近屏幕频率。 SDL 库没有 vsync,除非您通过它运行 OpenGL,因此唯一的方法是自己估算帧速率。
SDL 硬件双缓冲区不能保证,虽然它在工作时很好。我很少看到它在行动。

根据我使用 SDL 的经验,您必须使用 OpenGL 来完全消除撕裂。这是一个调整,但绘制简单的 2D 纹理并不是那么复杂,您还可以获得一些其他额外的好处,您可以实现这些好处,例如旋转、缩放、混合等。

但是,如果您仍然想使用软件渲染,我建议您使用脏矩形更新。习惯它也有点困难,但它节省了大量的处理工作,这可能会使更新更容易跟上节奏,并避免整个屏幕被撕裂(除非你滚动整个游戏区域或其他东西)。以及绘制到缓冲区所需的时间最少,这可以避免在屏幕更新时发生位块传输,这是撕裂的原因。

关于graphics - 如何避免在 Linux/X11 上使用 pygame 撕裂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1082562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com