Linux framebuffer图形和VSync
我正在用C语言制作适用于
linux framebuffer的游戏.到目前为止,我有一个红色的100×100正方形,与鼠标一起移动,就像指针一样.我实现了双缓冲,它工作正常(方块不闪烁).问题是,横向发生了很多撕裂事件.我的意思是,当正方形在x轴上移动时,它就像它被水平分割,并且它的一部分比另一部分更加柔和.如果我继续移动它,这个“裂口”会在广场上从上到下慢慢传播.
我相信这是因为硬件在我将双缓冲区复制到主缓冲区的那一刻读取帧缓冲区. 我试图用FBIO_WAITFORVSYNC ioctl解决问题,但没有成功. 我有什么想法可以在帧缓冲区上做VSync吗?请在您的解释中添加细节,因为这是我第一次在基于Linux的操作系统上编程这样的东西,所以我可能不会理解. 这是我的代码:http://pastebin.com/KJ4iaVEL 解决方法
这不是进行双缓冲的正确方法.你可以在后台缓冲区上进行所有绘画,但是你可以使用memcpy将数据传输到前面.复制过程中很容易发生屏幕刷新.
要正确地执行此操作,您只需要切换指向数据的指针;不要复制数据本身.使用Linux帧缓冲设备,这是通过具有两倍于物理屏幕的“虚拟”屏幕并使用偏移变量来设置是显示上半部分还是下半部分来完成的.您可以使用FBIOGET_VSCREENINFO,FBIOPUT_VSCREENINFO和FBIOPAN_DISPLAY ioctl调用查询大小和设置偏移量. 本页简要介绍了一些有关此内容的详细信息:http://www.ummon.eu/Linux/API/Devices/framebuffer.html 所有相关的数据结构都在linux / fb.h头文件中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |