gpt4 book ai didi

Linux 帧缓冲图形和 VSync

转载 作者:IT王子 更新时间:2023-10-29 01:01:35 33 4
gpt4 key购买 nike

我正在用 C 语言制作一款适用于 linux 帧缓冲区的游戏。到目前为止,我有一个红色的 100x100 正方形,它与鼠标一起移动,就像指针一样。我已经实现了双缓冲并且它工作正常(方 block 不闪烁)。问题是,横向发生了相当多的撕裂。我的意思是,当正方形在x轴上移动时,它就像被水平分割一样,一部分比另一部分缓慢前进。如果我继续移动它,这个“撕裂”会在正方形上从上到下缓慢传播。

我相信这是因为硬件在我将双缓冲区复制到主缓冲区的那一刻读取了帧缓冲区。

我尝试使用 FBIO_WAITFORVSYNC ioctl 来解决这个问题,但没有成功。

关于如何在帧缓冲区上执行 VSync 的任何想法?请在您的解释中添加详细信息,因为这是我第一次在基于 Linux 的操作系统上编写此类内容,否则我可能无法理解。

这是我的代码:http://pastebin.com/KJ4iaVEL

最佳答案

这不是进行双缓冲的正确方法。你在后台缓冲区上完成所有绘画是正确的,但是你做了一个 memcpy 将数据传输到前面。复制过程中很容易刷新屏幕。

要正确地做到这一点,您只需要将指针切换到数据;不复制数据本身。使用 Linux 帧缓冲设备,这是通过拥有一个比物理屏幕大两倍的“虚拟”屏幕,并使用偏移量变量来设置是显示上半部分还是下半部分来完成的。您可以使用 FBIOGET_VSCREENINFOFBIOPUT_VSCREENINFOFBIOPAN_DISPLAY ioctl 调用来查询大小和设置偏移量。

此页面简要介绍了一些相关细节:http://www.ummon.eu/Linux/API/Devices/framebuffer.html

所有相关的数据结构都在linux/fb.h头文件中。

关于Linux 帧缓冲图形和 VSync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907471/

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